(完整word版)计算机网络课程设计IP数据包解析(2)_第1页
(完整word版)计算机网络课程设计IP数据包解析(2)_第2页
(完整word版)计算机网络课程设计IP数据包解析(2)_第3页
(完整word版)计算机网络课程设计IP数据包解析(2)_第4页
(完整word版)计算机网络课程设计IP数据包解析(2)_第5页
已阅读5页,还剩8页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录1、课程设计目的 12、课程设计要求 23、程序设计分析 23.1 网卡设置 23.2 使用套接字 23.2. 接收数据包 33.3 定义 IP 头部的数据结构 33.4 IP 包的解析 43.5 协议的定义 43.6 捕获处理 54、运行结果 55、总结 66、课程设计参考资料 67、源程序代码 81、课程设计目的本章课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序, 说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的 理解和认识。2、课程设计要求本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示 在标准输出上,并同时写入日志文件。程序

2、的具体要求如下:1)以命令行形式运行:ipparse logfile ,其中ipparse是程序名,而logfile 则代表记录结果的日志文件。2 )在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数 据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、 头校验和、源IP地址和目的IP地址等内容。3)当程序接收到键盘输入 Ctrl+C时退出3、程序设计分析3.1网卡设置为了获取网络中的IP数据包,必须对网卡进行编程,在这里使用套接字 (socket)进行编程。但是,在通常情况下,网络通信的套接字程序只能响应与自 己硬件地址相匹配的数据包或是以广播形式发出的数据

3、包。对于其他形式的数据包,如已到达网络接口,但却不是发送到此地址的数据包,网络接口在骓投递地 址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数 据包。我们要想获取网络设备的所有数据包,就是需要将网卡设置为混杂模式。3.2使用套接字套接字分为三种,即流套接字(Stream socket)、数据报套接字(Datagram Socket)和原始套接字(Raw Socket)。要进行IP层数据包的接收和发送,应使用原始套 接字。创建原始套接字的代码如下:Socket sock:Sock=wsasocket(af_i net,sock_raw,ipproto-ip, nu ll,0

4、,wsa-flag-overlapped):本设计不用考虑超时情况。创建套接后,IP头就会包含在接收数据包中。然后,我可以设置IP头操作选项, 调用setsockopt函数。其中flag设置为true,并设定IP-HDRINCL选项,表明 用户可以亲自对IP头进行处理。最后使用bind()函数将socket绑定到本地网 卡上。绑定网卡后,需用 WSAIoctl()函数把网卡设置为混杂模式,使网卡能够 接收所有的网络数据。如果接收的数据包中的协议类型和定义的原始套接字匹 配,那么接收的数据就拷贝到套接字中,因此,网卡就可以接收所有经过的IP包。3.2.2接收数据包在程序中可使用recv()函数接

5、收经过的IP包。该函数有四个参数,第一个参数接收操作所用的套接字描述符; 第二个参数接收缓冲区的地址;第三个参数 接收缓冲区的大小,也就是所要接收的字节数;第四个参数是一个附加标志,如3果对所发送的数据没特殊要求,直接设为00因为IP数据包的最大长度是65535B,5因此缓冲区的大小不能小于65535B设置缓冲区后,可利用循环来反复监听接收IP包,用recv()函数实现接收功能3.3定义IP头部的数据结构程序需要定义一个数据结构表示IP头部。其代码如下:struct IP HEADERun sig ned short ip_versi on, /*IP的版本号*/ip_hdr_len ;/*I

6、P包头的长度*/ip_tos ;/*IP包的服务类型*/ip_total_le n/*IP包的总长度*/ip_id ;/*IP包的分段标识*/ip_flags ;/*IP包的分段标志*/ip_frag_offset/*IP包的分段偏移*/ip_ttl/*IP包的生存时间*/ip_proto ;/*IP包的高层协议*/ip_hdr_chksum;/*IP包的校验和*/struct IPADDRESS ip_src_addr ;/*IP包的源IP地址*/ip_dest_addr ;/*IP包的目的IP地址*/ipheader;3.4 IP包的解析9解析IP包的字段有两种策略。针对长度为 8位、16

7、位和32位的字段(或子 字段)时,可以利用IP-HEADEF的成员直接获取。要解析长度不是 8位倍数的字 段(或子字段)时,可以利用C语言中的移位以人、及与、或操作完成。3.5协议的定义(包含相应的头文件#include #include ):DWORD dwIoControlCode=SIO_RCVALL,接收所有的 IP 包*/ dwProtocol=IPPROTOP; /* 协议类型为 IP*/3.6捕获处理1. 加载 Win sock ;2. 创建一个接收原始IP包的socket连接;3. 绑定到一个接口;4. 进行WSAIoctl设置,接收所有的IP数据包。代码如下:if (WSAI

8、octl(s, dwIoCo ntrolCode, & optval, sizeof(optval),NULL, 0, & dwBytesRet, NULL, NULL) = SOCKET_ERROR)5. 接着设定一个线程进行捕获:(1)创建一个接收IP包的链表头;(2)设置一个标识,为真,则不断进行IP包的捕获;(3)建立一个新的结点,将捕获的数据包加入到该结点;(4)如果链表的长度达到指定的长度,创建一个线程对该链表的IP包进行解析; 再设置一个在IP数据包链表不足给定的长度,而又中止IP捕获时,对链表的处 理;(5) 为下一个IP包链表创建一个链表头。6. 建立一个进行

9、IP包解析并显示的线程,进行解析IP数据包,然后显示IP数 据包。4、运行结果截获IP数据包程序运行结果如下:自的】P地址:192,168,1,254齐:即也:卩卢in ri tyB, Sr wj ireH1792C207400.DF- 0,11£-0移:0 周期;阴:Froto_k為遏;烈"讥血 GciiccB17920标WT:祸74*匸盂楼:E>,QB= 0,Hf =9兰存周期:抽交验和:32948t±:59.52.207.226 自的 IP 地址;192.168.1_23IJ5、总结这次计算机网络课程设计是解析IP数据包,通过这次上机充分应用了所学 的

10、计算机网络和C语言的知识,并上网搜索一部分相当资料,粗略设计出该程序。通过本次课程设计,充分运用了所学的计算机网络知识, 设计出了如何解析 ip数据包,从而更加深刻的了解到了 ip数据包的结构及ip协议的相关问题, 从而对ip层的工作原理有更好的理解和认识。在课程设计的过程也碰到的不少问题。 该程序也存在着不少的缺陷,比如并 不是所有的数据包都能捕获,女口: IP数据包以外的数据包都抓不到;只支持ICMR IGMR TCP UDP这些协议。6、课程设计参考资料计算机网络(第四版) 主编:谢希仁出版社:电子工业出版社 出版时间:2004年7月计算机网络课程设计 主编:吴功宜胡晓英张仁何云王宁出版

11、社:机械 工业出版社出版或修订时间:2005年9月计算机网络设计主编:易建勋 出版社:人民邮电出版社 出版或修订时间:2007年10月7、源程序代码#in elude "wi nsock2.h"#in elude "ws2tcpip.h"#i nclude <win dows.h>#in clude<fstream>#i nclude <iostream>using n amespace std;typedef struct _IP_HEADER unionBYTE Versio n;BYTE HdrLe n;;BYT

12、E ServiceType;WORD TotalLe n;WORD ID;unionWORD Flags;WORD Fragoff;BYTE TimeToLive;BYTE Protocol;WORD HdrChksum;DWORD SrcAddr;DWORD DstAddr;BYTE Optio ns; IP_HEADER; int mai n () SOCKET sock;WSADATA wsData;if(WSAStartup(MAKEWORD(2,2),&wsData) != 0)prin tf("WSAStartup failed!n");return -

13、1;if(sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP) = INVALID_SOCKET)prin tf("create socket failedn");return -1;BOOL flag = true;if(setsockopt(sock,IPPROTOP,IP_HDRINCL,(char*) &flag,sizeof(flag)=SOCKET_ERROR)prin tf("setsockopt failed!n");return -1;char hostName128;if(gethost nam

14、e(hostName,100) = SOCKET_ERROR)prin tf("gethost name failed!n");return -1;hoste nt *pHostIP;if(pHostIP = gethostb yn ame(hostName) = NULL)11prin tf("gethostb yn ame failed' n");return -1;sockaddr_i n addr_i n;addr_i n.sin_addr = *(in_addr*)pHostlP->h_addr_list0;addr_i n.si

15、n_family = AF_INET;addr_i n.sin _port = hton s(6000);if(bi nd(sock,(PSOCKADDR )&addr_i n,sizeof(addr_i n) = SOCKET_ERROR)printf("bind failed'n");return -1;#defi ne IO_RCVALL _WSAIOW(IOC_VENDOR,1)DWORD dwBufferLe n10;DWORD dwBufferI nLe n = 1;DWORD dwBytesReturned = 0;if(WSAIoctl(so

16、ck,IO_RCVALL,&dwBufferl nLe n,sizeof(dwBufferl nLe n),& dwBufferLe n,sizeof(dwBufferLe n),&dwBytesReturned,NULL,NULL)=SOCKET_ERROR)prin tf("ioctlsocket faild'n");return -1;printf(”开始解析经过本机的IP数据包!nn");while(true)int size = recv(sock,buffer,BUFFER_SIZE,0);IP_HEADER ip=*(

17、IP_HEADER *)buffer;cout«""<<e ndl;cout«"版本:"<<(ip.Version>>4)<<endl;cout«"头部长度:"<<(ip.HdrLen &0x0f)*4)<<endl;cout«"服务类型:Priority"vv(ip.ServiceType>>5)v<", Service"<<(ip.Servic

18、eType>>1)&0x0f)<<e ndl;cout«"总长度:"vvip.TotalLen<<endl;cout«"标识符:"vvip.lDvvendl;cout«"标志位:"<v(ip.Flags>>15)&0x01)«",DF="vv(ip.Flags>>14)&0x01)vv",Mf="vv( (i p.Flags>>13 )&0x01)«e ndl;cout«"片偏移:"<v(ip.Fragoff&0x1fff)v<endl;cout«"生存周期:"<<(int)ip.TimeToLive<<endl;cout«"协议:Protocol"<<(i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论