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

上传人:夏** 文档编号:563453738 上传时间:2022-08-14 格式:DOC 页数:15 大小:245KB
返回 下载 相关 举报
计算机网络课程设计编程实现简单的TCP协议分析器_第1页
第1页 / 共15页
计算机网络课程设计编程实现简单的TCP协议分析器_第2页
第2页 / 共15页
计算机网络课程设计编程实现简单的TCP协议分析器_第3页
第3页 / 共15页
计算机网络课程设计编程实现简单的TCP协议分析器_第4页
第4页 / 共15页
计算机网络课程设计编程实现简单的TCP协议分析器_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《计算机网络课程设计编程实现简单的TCP协议分析器》由会员分享,可在线阅读,更多相关《计算机网络课程设计编程实现简单的TCP协议分析器(15页珍藏版)》请在金锄头文库上搜索。

1、 编程实现简单的TCP协议分析器 编程实现简单的TCP协议分析器一、问题描述编程实现简单的TCP协议分析器,TCP协议分析器是一种用于监督和跟踪网络活动的诊断工具,它从局域网中抓取IP数据包,并对它进行分析得到相应的头部信息,过滤TCP包进行分析,得到TCP包的相应信息。二、基本要求1.利用原始套接字实现简单的TCP协议分析器。2.系统功能包括: 2.1 原始套接字与网卡绑定,并接收流经网卡的所有数据包; 2.2 对数据包进行分析以获得源IP地址和目的IP地址; 2.3 对TCP Segment进行分析以获得其首部详细信息; 2.4 显示分析结果。3 建议使用VC+。三、设计思想TCP协议的数

2、据传送程序是由二个子程序组成的。也可以看成是服务器端程序和客户端程序,其中:服务器端程序的功能是侦听端口号,接收远 程主要的TCP连接申请,并接收远程主机传送来的文字数据。另外一个子程序,也就是所谓的客户端程序,主要实现向网络的远程主机提出TCP连接申请。程序利用原始套接字抓取局域网中的IP包。TCP协议分析器实现了sniffer的一部分功能。而sniffer的工作原理是:1. 把网卡置于混杂模式;2. 捕获数据包;3. 分析数据包。Raw Socket: 原始套接字可以用它来发送和接收 IP 层以上的原始数据包, 如 ICMP, TCP, UDP等。 四、系统结构(1)Pcap_addr描述

3、网络接口地址;(2)pcap_pkthdr用来描述每个捕获到的数据包的基本信息;(3)int_pcaplookupnet获取网络地址和网络掩码;(4)int_pcaploop循环捕获网络数据包,直到遇到错误或满足退出条件;(5)pcap_t* pcap_open_dead构造一个libpcap句柄。五、程序流程(或模块划分)六、源程序#include pcap.hstruct ether_header u_int8_t ether_dhost6; /* 目的以太网地址 */ u_int8_t ether_shost6; /* 源以太网地址 */ u_int16_t ether_type; /*

4、 以太网类型 */;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 arp_source_ethernet_address6; /* 源以太网地址 */ u_int8_t arp_s

5、ource_ip_address4; /* 源IP地址 */ u_int8_t arp_destination_ethernet_address6; /* 目的以太网地址 */ u_int8_t arp_destination_ip_address4; /* 目的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

6、; #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; /*

7、 目的IP地址 */;struct udp_header u_int16_t udp_source_port; /* 源端口号 */ u_int16_t udp_destination_port; /* 目的端口号 */ u_int16_t udp_length; /* 长度 */ u_int16_t udp_checksum; /* 校验和 */;struct tcp_header u_int16_t tcp_source_port; /* 源端口号 */ u_int16_t tcp_destination_port; /* 目的端口号 */ u_int32_t tcp_sequence_l

8、iuzhen; /* 序列号 */ u_int32_t tcp_acknowledgement; /* 确认序列号 */ #ifdef WORDS_BIGENDIAN u_int8_t tcp_offset: 4, /* 偏移 */ tcp_reserved: 4; /* 未用 */ #else u_int8_t tcp_reserved: 4, /* 未用 */ tcp_offset: 4; /* 偏移 */ #endif u_int8_t tcp_flags; /* 标记 */ u_int16_t tcp_windows; /* 窗口大小 */ u_int16_t tcp_checksum

9、; /* 校验和 */ u_int16_t tcp_urgent_pointer; /* 紧急指针 */;struct icmp_header u_int8_t icmp_type; /* ICMP类型 */ u_int8_t icmp_code; /* ICMP代码 */ u_int16_t icmp_checksum; /* 校验和 */ u_int16_t icmp_id; /* 标识符 */ u_int16_t icmp_sequence; /* 序列码 */;void tcp_protocol_packet_callback(u_char *argument, const struc

10、t pcap_pkthdr *packet_header, const u_char *packet_content) struct tcp_header *tcp_protocol; /* TCP协议变量 */ u_char flags; /* 标记 */ int header_length; /* 长度 */ u_short source_port; /* 源端口 */ u_short destination_port; /* 目的端口 */ u_short windows; /* 窗口大小 */ u_short urgent_pointer; /* 紧急指针 */ u_int seque

11、nce; /* 序列号 */ u_int acknowledgement; /* 确认号 */ u_int16_t checksum; /* 校验和 */ tcp_protocol = (struct tcp_header*)(packet_content + 14+20); /* 获得TCP协议内容 */ source_port = ntohs(tcp_protocol-tcp_source_port); /* 获得源端口 */ destination_port = ntohs(tcp_protocol-tcp_destination_port); /* 获得目的端口 */ header_l

12、ength = tcp_protocol-tcp_offset *4; /* 长度 */ sequence = ntohl(tcp_protocol-tcp_sequence_liuzhen); /* 序列码 */ acknowledgement = ntohl(tcp_protocol-tcp_acknowledgement); /* 确认序列码 */ windows = ntohs(tcp_protocol-tcp_windows); /* 窗口大小 */ urgent_pointer = ntohs(tcp_protocol-tcp_urgent_pointer); /* 紧急指针 */ flags = tcp_protocol-tcp_flags; /* 标识 */ checksum = ntohs(tcp_protocol-tcp_checksum); /* 校验和 */ printf(- TCP协议 -n); printf(源端口号:%dn, source_port); printf(目的端口号:%dn, destination_port); switch (destination_port) case 80: printf(上层协议为HTTP协议n); break; case 21: printf(上层协议为FTP协议n); break; case 23:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 试题/考题 > 高中试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号