2022年2022年计算机网络课程设计解析IP数据包 .pdf
《2022年2022年计算机网络课程设计解析IP数据包 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年计算机网络课程设计解析IP数据包 .pdf(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、沈阳理工大学课程设计专用纸Noi 沈阳理工大学目录1 课程设计目的 . 1 2 课程设计要求 . 1 3 IP 数据包的相关知识 . 1 4 课程设计分析 . 35 程序代码 . 7 6 运行结果与分析. 7 7 参考文献 . 15 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 16 页 - - - - - - - - - 沈阳理工大学课程设计专用纸No1 沈阳理工大学1 课程设计目的题目:解析 IP 数据包本章课程设计的目的就是设计一个解析IP 数据包的程序,并根据这
2、个程序,说明IP数据包的结构及 IP 协议的相关问题,从而对IP 层的工作原理有更好的理解和认识。2 课程设计要求本设计的目标是捕获网络中的IP 数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。程序的具体要求如下:1)以命令行形式运行: ipparse logfile,其中 ipparse 是程序名 , 而 logfile则代表记录结果的日志文件 2 )在标准输出和日志文件中写入捕获的IP 包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的 IP 地址等内容3)当程序接收到键盘输入Ctrl+C 时
3、退出3IP 数据包相关知识互联网络层是 TCP/IP 协议参考模型中的关键部分。IP 协议把传输层送来的消息组装成 IP 数据包, 并把 IP 数据包传递给数据链路层。 IP 协议在 TCP/IP 协议族中处于核心地位,IP 协议制定了统一的IP 数据包格式,以消除个通信子网间的差异,从而为信息发送方和接收方提供了透明的传输通道编制本程序前,首先要对IP 包的格式有一定的了解。图3-1给出了 IP 协议的数据包格式版本报头标长服务类型总长度标识标致片偏移生存时间协议头校验和源 IP 地址目的 IP 地址选项填充域数据部分图 3-1IP 数据包格式名师资料总结 - - -精品资料欢迎下载 - -
4、 - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 16 页 - - - - - - - - - 沈阳理工大学课程设计专用纸No2 沈阳理工大学IP 数据包的第一个字段是版本字段,其长度为4 位,表示所使用的IP 协议的版本。本程序主要针对版本值为4 的 IP 数据包的解析。报头标长( IHL )字段为 4 位,它定义了以 4B 为一个单位的 IP 包的报头长度。报头中除了选项字段和填充域字段外, 其他各字段是定长的。 因此,IP 数据包的头长度在2040B之间,是可变的。服务类型字段共8 位,用于指示路由器如何处理该数据
5、包。该字段长度由4 位服务类型(TOS)子域和 3 位优先级(precedence )子域组成,1 位为保留位。该字段结构如图3-2所示。b7 b6b5b4b3b2b1b0图 3-2 服务类型字段结构优先级共有 8 种,优先级越高表明数据包越重要。表 3-3 列出了各种优先级所代表的意义。表 3-3 优先级子域的说明在 4 位服务类型子域中, b4、b3、b2、b1 分别表示 D(延迟) 、T(吞吐量)、R(可靠性) 、与 C(成本) 。表 3-4 列出了服务类型子域的构成表 3-4 服务类型子域总长度字段为 2B,它定义了以字节为单位的数据包的总长度。IP 数据包的最大长度为216=6553
6、5B。标示字段长度为 16 位,用于识别 IP 数据包的编号。 每批数据都要有一个标识值, 用于让目的主机判断新来的数据属于哪一组。报头中的标致字段如图3-5 所示。 标志字段共 3 位, 最高位是 0.禁止分片标志 DF (do not 优先级D T R C 0 位数( b7 b6 b5)意义111 网络控制110 网络间控制101 重要( CRITIC/ECP)100 即时,优先011 即时010 立刻001 优先000 普通位数( b4 b3 b2 b1)意义1111 安全及最高1000 延迟最小0100 吞吐量最大0010 可靠性最大0001 金钱成本最小0000 普通服务名师资料总结
7、 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 16 页 - - - - - - - - - 沈阳理工大学课程设计专用纸No3 沈阳理工大学fragment)字段的值若为 1,表示不能对数据包分片;若DF 值为 0,则表明可以分片。分片标志 MF(more fragment)的值为 1,表示接收到的不是最后一个分片;若MF 值为 0,表示接收到的是最后一个分片。图 3-5 标致字段的结构片偏移字段共 13 位,说明分片在整个数据包中的相对位置。片偏移值是以8B 为单位的计数的,因此选
8、择的分片长度应该是8B 的整数倍。生存时间( TTL)字段为 8 位,用来设置数据包在互联网络的传输过程的寿命,通常是用一个数据包可以经过的最多的路由器跳步数来限定的。协议字段为 8 位,表示使用此 IP 数据包的高层协议类型, 常用的协议号如表3-6 所示。表 3-6 典型的协议号头校验和字段为 16 位,用于存放检查报头错误的校验码。校验的范围是整个IP 包的报头。校验和按如下方法计算:1)将头校验和的字段置为0。2)将报头部分的所有数据以16 位为单位进行累加,累加方式是求异或。3)将累加的结果取反码,就是头校验和。当收到一个 IP 包时,要检查报头是出错, 就把报头中的所有数据以16
9、位为单位进行累加,若累加的结果为0,则报头没有出错。地址字段包括源地址和目的地址。源地址和目的地址的长度都是32 位,分别表示发送数据包的源主机和目的主机的IP 地址。选项字段的长度范围是040B,主要用于控制和测试。 在使用选项字段的过程中, 有可能出现报头部分的长度不是32 位的整数倍的情况。如果出现这种情况,就需要通过填充位来凑齐。4课程设计分析4.1 网卡设置为了获取网络中的IP 数据包,必须对网卡进行编程,在这里使用套接字(socket)进行编程。但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式发出的数据包。对于其他形式的数据包,如已到达网络
10、接口,但却不是发送到此地址的数据包,网络接口在投递地址并非自身地址之后将不引起响应,也就是0 DF MF 序号协议名称序号协议名称1 ICMP 17 UDP 2 IGMP 41 IPv6 4 IP inIP 46 RSVP 6 TCP 89 OSPF 8 EGP 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 16 页 - - - - - - - - - 沈阳理工大学课程设计专用纸No4 沈阳理工大学说应用程序无法收取与自己无关的数据包。我们要想获取网络设备的所有数据包,
11、就是需要将网卡设置为混杂模式。本程序主要由三部分构成:初始化原始套接字,反复监听捕获数据包和解析数据包。下面就结合核心代码对程序的具体实现进行解析,同时使程序流程更加清晰,去掉了错误检查等保护性代码。4.2 使用原始套接字套接字分为三种,即流套接字(Stream socket)、数据报套接字 (Datagram Socket) 和原始套接字 (Raw Socket) 。要进行IP 层数据包的接收和发送,应使用原始套接字。创建原始套接字的代码如下: SOCKET sock: sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO-IP,NULL,0,WSA-FLAG-OV
12、ERAPPED); 在 WSASoccket函数中,第一个参数指定通信发生的区字段,AF_INET是指针对 Interest的,允许在远程主机之间的通信。第二个参数是套接字的类型,在AF_INET地址族下,有SOCK_STREAM,SOCK_DGRAM,SOCK_RAM三种套接字类型。第三个参数依赖于第二个参数,用于指定套接字所用的特定协议,这里使用IP 协议。第四个参数为WSAPROTOCOL_INFO位,该位可以置空。第五个参数保留,永远置0。第六个参数是标志位,WSA-FLAG-OVERAPPED表明可以使用发送接收超时设置,本课程设计也可以把这个标志位设置为NULL ,因为本设计不用考
13、虑超时情况。创建原始套接后, IP 头就会包含在接收数据包中。然后,可以设置IP 头操作选项,调用 setsockopt函数。其中 flag设置为 true, 并设定 IP-HDRINCL选项,表明用户可以亲自对 IP 头进行处理。最后使用 bind() 函数将 socket 绑定到本地网卡上。绑定网卡后,需用WSAIoctl() 函数把网卡设置为混杂模式,使网卡能够接收所有的网络数据。如果接收的数据包中的协议类型和定义的原始套接字匹配,那么接收的数据就拷贝到套接字中,因此,网卡就可以接收所有经过的IP 包。4.3 接收 IP 数据包在程序中可使用 recv() 函数接收经过的 IP 包。该函
14、数有四个参数, 第一个参数接收操作所用的套接字描述符;第二个参数接收缓冲区的地址;第三个参数接收缓冲区的大小,也就是所要接收的字节数; 第四个参数是一个附加标志, 如果对所发送的数据没特殊要求,直接设为 0。因为 IP 数据包的最大长度是65535B ,因此缓冲区的大小不能小于65535B 。设置缓冲区后,可利用循环来反复监听接收IP 包,用 recv() 函数实现接收功能。4.4 定义 IP 头部的数据结构程序需要定义一个数据结构表示IP 头部。其代码如下:typedef struct _IP_HEADER /定义 IP 头 名师资料总结 - - -精品资料欢迎下载 - - - - - -
15、- - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 16 页 - - - - - - - - - 沈阳理工大学课程设计专用纸No5 沈阳理工大学 union BYTE Version; /版本(前 4 位) BYTE HdrLen; /IHL(后 4 位) ,报头标长 ; BYTE ServiceType; /服务类型 WORD TotalLen; /总长 WORD ID; /标识 union WORD Flags; /标志(前 3 位) WORD FragOff; /分段偏移(后 13 位) ; BYTE TimeToLive; /生命期
16、 BYTE Protocol; /协议 WORD HdrChksum; /头校验和 DWORD SrcAddr; /源地址 DWORD DstAddr; /目的地址 BYTE Options; /选项 IP_HEADER; 这里我们只考虑IP 头部结构,不考虑数据部分。在捕获IP 数据包后,可以通过指针把缓冲区的内容强制转化为IP_HEADER 数据结构。 IP_HEADER ip=*(IP_HEADER *)buffer; 4.5IP 包的解析解析 IP 包的字段有两种策略。针对长度为8 位、16 位和 32 位的字段 (或子字段 ) 时,可以利用 IP-HEADER 的成员直接获取。要解析
17、长度不是8 位倍数的字段 (或子字段 )时,可以利用 C语言中的移位以人、及与、或操作完成。下面给出了通过IP_HEADER 解析 IP 头各个字段的代码。/* 获取版本字段 */ ip.Version4; /* 获取头部长度字段 */ ip.HdrLen & 0 x0f; /* 获取服务类型字段中的优先级子域*/ ip.ServiceType5; /* 获取服务类型字段中的TOS子域*/ (ip.ServiceType1)&0 x0f; /* 获取总长度字段 */ ip.TotalLen; /* 获取标识字段 */ ip.ID; 名师资料总结 - - -精品资料欢迎下载 - - - - -
18、- - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 16 页 - - - - - - - - - 沈阳理工大学课程设计专用纸No6 沈阳理工大学/* 获取标识字段 */ DF=(ip.Flags14)&0 x01; MF=(ip.Flags13)&0 x01; /* 获取分段偏移字段 */ ip.FragOff &0 x1fff; /* 获取生存时间字段 */ ip.TimeToLive; /* 获取协议字段 */ /* 获取头校验和字段 */ ip.HdrChksum; /* 解析源 IP 地址字段 */ inet_ntoa(*(in
19、_add*)&ip.SrcAddr; /* 解析目的地址字段 */ inet_ntoa(*(in_add*)&ip.DstAddr; 4.6 协议的定义(包含相应的头文件 #include #include): DWORD dwIoControlCode=SIO_RCVALL, /* 接收所有的 IP 包*/ dwProtocol=IPPROTO_IP; /* 协议类型为 IP*/4.7 捕获处理1. 加载 Winsock ;2. 创建一个接收原始 IP 包的 socket 连接;3. 绑定到一个接口;4. 进行 WSAIoctl 设置,接收所有的IP 数据包。代码如下:if (WSAIoct
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年计算机网络课程设计解析IP数据包 2022 计算机网络 课程设计 解析 IP 数据包
限制150内