2022年2022年计算机网络课程设计IP数据包解析 .pdf
《2022年2022年计算机网络课程设计IP数据包解析 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年计算机网络课程设计IP数据包解析 .pdf(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 目录1、课程设计目的 . 12、课程设计要求 . 23、程序设计分析 . 23.1 网卡设置 . 23.2 使用套接字 . 23.2. 接收数据包 . 33.3 定义 IP 头部的数据结构 . 33.4 IP包的解析 . 43.5 协议的定义 . 43.6 捕获处理 . 54、运行结果 . 55、总结 . 66、课程设计参考资料 . 67、源程序代码 . 8名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - 2 1、课程设计目
2、的本章课程设计的目的就是设计一个解析IP 数据包的程序, 并根据这个程序,说明 IP 数据包的结构及 IP 协议的相关问题,从而对IP 层的工作原理有更好的理解和认识。2、课程设计要求本设计的目标是捕获网络中的IP 数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。程序的具体要求如下:1) 以命令行形式运行: ipparse logfile, 其中 ipparse 是程序名 , 而 logfile则代表记录结果的日志文件。 2 )在标准输出和日志文件中写入捕获的IP 包的版本、 头长度、 服务类型、 数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头
3、校验和、源 IP 地址和目的 IP 地址等内容。3)当程序接收到键盘输入Ctrl+C 时退出3、程序设计分析3.1 网卡设置为了获取网络中的IP 数据包,必须对网卡进行编程,在这里使用套接字(socket) 进行编程。 但是,在通常情况下, 网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式发出的数据包。对于其他形式的数据包,如已到达网络接口, 但却不是发送到此地址的数据包,网络接口在骓投递地名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 -
4、 - - - - - - - - 3 址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。我们要想获取网络设备的所有数据包,就是需要将网卡设置为混杂模式。3.2 使用套接字套接字分为三种,即流套接字(Stream socket)、数据报套接字 (Datagram Socket) 和原始套接字 (Raw Socket) 。要进行 IP 层数据包的接收和发送,应使用原始套接字。创建原始套接字的代码如下: Socket sock: Sock=wsasocket(af_inet,sock_raw,ipproto-ip,null,0,wsa-flag-overlapped): 本
5、设计不用考虑超时情况。创建套接后, IP 头就会包含在接收数据包中。 然后,我可以设置 IP 头操作选项,调用 setsockopt函数。其中 flag设置为 true, 并设定 IP-HDRINCL选项,表明用户可以亲自对 IP 头进行处理。最后使用bind() 函数将 socket 绑定到本地网卡上。绑定网卡后,需用WSAIoctl() 函数把网卡设置为混杂模式,使网卡能够接收所有的网络数据。如果接收的数据包中的协议类型和定义的原始套接字匹配,那么接收的数据就拷贝到套接字中,因此,网卡就可以接收所有经过的IP包。3.2.2 接收数据包在程序中可使用 recv() 函数接收经过的IP 包。该
6、函数有四个参数,第一个参数接收操作所用的套接字描述符;第二个参数接收缓冲区的地址;第三个参数接收缓冲区的大小, 也就是所要接收的字节数; 第四个参数是一个附加标志, 如名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - 4 果对所发送的数据没特殊要求, 直接设为 0。 因为 IP 数据包的最大长度是65535B,因此缓冲区的大小不能小于65535B。设置缓冲区后,可利用循环来反复监听接收 IP 包,用 recv() 函数实现接收功
7、能。3.3 定义 IP 头部的数据结构程序需要定义一个数据结构表示IP 头部。其代码如下:struct IP_HEADER unsigned short ip_version, /*IP的版本号 */ ip_hdr_len ; /*IP包头的长度 */ ip_tos ; /*IP包的服务类型 */ ip_total_len; /*IP包的总长度 */ ip_id ; /*IP包的分段标识 */ ip_flags; /*IP包的分段标志 */ ip_frag_offset; /*IP包的分段偏移 */ ip_ttl; /*IP包的生存时间 */ ip_proto ; /*IP包的高层协议 */
8、ip_hdr_chksum; /*IP包的校验和 */ struct IPADDRESS ip_src_addr; /*IP包的源 IP 地址*/ ip_dest_addr ; /*IP包的目的 IP 地址*/ ipheader; 3.4 IP包的解析名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - 5 解析 IP 包的字段有两种策略。针对长度为8 位、16位和 32 位的字段 ( 或子字段) 时,可以利用 IP-HEADER
9、的成员直接获取。要解析长度不是8 位倍数的字段(或子字段 )时,可以利用 C语言中的移位以人、及与、或操作完成。3.5 协议的定义( 包含相应的头文件 #include #include): DWORD dwIoControlCode=SIO_RCVALL, /* 接收所有的 IP 包*/ dwProtocol=IPPROTO_IP; /* 协议类型为 IP*/3.6 捕获处理1. 加载 Winsock ;2. 创建一个接收原始 IP 包的 socket 连接;3. 绑定到一个接口;4. 进行 WSAIoctl 设置,接收所有的IP 数据包。代码如下:if (WSAIoctl(s, dwIoC
10、ontrolCode, &optval, sizeof(optval), NULL, 0, &dwBytesRet, NULL, NULL) = SOCKET_ERROR) 5. 接着设定一个线程进行捕获:(1)创建一个接收 IP 包的链表头;(2)设置一个标识,为真,则不断进行IP 包的捕获;(3)建立一个新的结点,将捕获的数据包加入到该结点;(4) 如果链表的长度达到指定的长度, 创建一个线程对该链表的IP 包进行解析;再设置一个在 IP 数据包链表不足给定的长度, 而又中止 IP 捕获时,对链表的处理;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年计算机网络课程设计IP数据包解析 2022 计算机网络 课程设计 IP 数据包 解析
限制150内