1 / 15
文档名称:

计算机网络课程设计-编程实现简单的TCP协议分析器.doc

格式:doc   页数:15
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

计算机网络课程设计-编程实现简单的TCP协议分析器.doc

上传人:智客网 2011/12/30 文件大小:0 KB

下载得到文件列表

计算机网络课程设计-编程实现简单的TCP协议分析器.doc

文档介绍

文档介绍:编程实现简单的TCP协议分析器
一、问题描述
编程实现简单的TCP协议分析器,TCP协议分析器是一种用于监督和跟踪网络活动的诊断工具,它从局域网中抓取IP数据包,并对它进行分析得到相应的头部信息,过滤TCP包进行分析,得到TCP包的相应信息。
二、基本要求

:
原始套接字与网卡绑定,并接收流经网卡的所有数据包;
对数据包进行分析以获得源IP地址和目的IP地址;
对TCP Segment进行分析以获得其首部详细信息;
显示分析结果。
3 建议使用VC++。
三、设计思想
TCP协议的数据传送程序是由二个子程序组成的。也可以看成是服务器端程序和客户端程序,其中:服务器端程序的功能是侦听端口号,接收远程主要的TCP连接申请,并接收远程主机传送来的文字数据。另外一个子程序,也就是所谓的客户端程序,主要实现向网络的远程主机提出TCP连接申请。
程序利用原始套接字抓取局域网中的IP包。
TCP协议分析器实现了sniffer的一部分功能。而sniffer的工作原理是:1. 把网卡置于混杂模式;2. 捕获数据包;3. 分析数据包。
Raw Socket: 原始套接字可以用它来发送和接收 IP 层以上的原始数据包, 如 ICMP, TCP, UDP等。
四、系统结构
(1)Pcap_addr描述网络接口地址;
(2)pcap_pkthdr用来描述每个捕获到的数据包的基本信息;
(3)获取网络地址和网络掩码;
(4)int_pcaploop循环捕获网络数据包,直到遇到错误或满足退出条件;
(5)pcap_t* pcap_open_dead构造一个libpcap句柄。
五、程序流程(或模块划分)
六、源程序
#include ""
struct ether_header
{
u_int8_t ether_dhost[6];
/* 目的以太网地址*/
u_int8_t ether_shost[6];
/* 源以太网地址*/
u_int16_t ether_type;

/* 以太网类型*/
};
struct arp_header
{
u_int16_t arp_hardware_type;
/* 硬件类型*/
u_int16_t arp_protocol_type;
/* 协议类型*/
u_int8_t arp_hardware_length;
/* 硬件地址长度*/
u_int8_t arp_protocol_length;
/* 协议地址长度*/
u_int16_t arp_operation_code;
/* 操作码*/
u_int8_t _address[6];
/* 源以太网地址*/
u_int8_t arp_source_ip_address[4];
/* 源IP地址*/
u_int8_t _address[6];
/* 目的以太网地址*/
u_int8_t arp_destination_ip_address[4];
/* 目的IP地址*/
};
struct ip_header
{
#if defined(WORDS_BIGENDIAN)
u_int8_t ip_version: 4,
/* 版本*/
ip_header_length: 4;
/* 首部长度*/
#else
u_int8_t ip_header_length: 4, ip_version: 4;
#endif
u_int8_t ip_tos;
/* 服务质量*/
u_int16_t ip_length;
/* 长度*/
u_int16_t ip_id;
/* 标识*/
u_int16_t ip_off;

/* 偏移*/
u_int8_t ip_ttl;
/* 生存时间*/

u_int8_t ip_protocol;
/* 协议类型*/
u_int16_t ip_checksum;
/* 校验和*/
struct in_addr ip_souce_address;
/* 源IP地址*/
struct in_addr ip_destination_address;
/* 目的IP地址*/
};
struct udp_header
{
u_int16_t udp_source_port;
/* 源端口号*/
u_int16_t udp_destination_port;