版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机网络课程设计 第七章 解析IP数据包2012年5月7.1 课程设计目的 设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。7.2 课程设计要求(1/2)本程序的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件中。程序的具体要求如下:1) 以命令行形式运行:ipparse logfile ipparse 程序名 logfile 记录结果的日志文件名7.2 课程设计要求(2/2)2) 在标准输出和日志文件中写入捕获IP包的如下信息: 版本/头长度/服务类型/数据包总长度/
2、数据包标识/分段标志/分段偏移值/生存时间/上层协议类型/头检验和/源IP地址和目的IP地址等内容。3) 当程序接收到键盘输入Ctrl+C时退出。7.3 相关知识 IP包的格式互联网络层是TCP/IP协议参考模型中的关键部分。IP协议把传输层送来的信息封装成IP数据包,并把IP数据包传递给数据链路层。IP协议在TCP/IP协议族中处于核心地位,IP协议制定了统一的IP数据包格式,以消除各通信子网间的差异,从而为消息发送方和接收方提供了透明的传输通道。编制本程序前,首先要了解IP包的格式。 IP数据包格式版本报头标长服务类型总长度标识标志片偏移生存时间协议头校验和源IP地址目的IP地址选项填充域
3、数据部分报头0 4 8 16 19 24 31 版本字段 占用4位 表示所使用的IP协议的版本.目前的版本是IPV4,版本字段的值为4,下一代版本是IPV6,版本字段的值为6。 本程序针对版本值为4的IP数据包解析。7.3 相关知识版本字段7.3 相关知识报头标长(IHL)字段报头标长(IHL)字段占用4位定义了以4B为一个单位的IP包的报头长度。报头中除了选项字段和填充域字段外,其他各字段是定长的。IP数据包的头长度在20B60B之间,是可变的。7.3 相关知识服务类型字段服务类型字段 8位指示路由器如何处理该数据包。该字段长度由4位服务类型(TOS)子域和3位优先级(precedence)
4、子域组成,1位为保留位。优先级DTRC0b7 b6 b5b4b3b2b1b07.3 相关知识优先级优先级有8种,优先级越高表明数据包越重要。下表列出优先级所代表的意义:位数(b7b6b5)意义111110101100011010001000网络控制网络间控制重要(CRITIC/ECP)即时,优先即时立刻优先普通7.3 相关知识服务类型在4位服务类型子域中,b4,b3,b2,b1分别表示D(延迟),T(吞吐量),R(可靠性)与C(成本),下表列出了服务类型子域的构成:位数(b4b3b2b1)意义111110000100001000010000安全级最高延迟最小吞吐量最大可靠性最大金钱成本最小普通
5、服务7.3 相关知识总长度字段总长度字段 2B总长度包头数据 定义以字节为单位的数据包的总长度 IP数据包的最大长度为216=65535B预备知识报文的分片和重组控制由于IP互连的物理网络处理的最大报文长度不同,所以IP数据包在传输过程中可能被分片。IP数据包使用“标识”、“标志”、“片偏移”三个域对分片进行控制。分片后的报文独立选择路由路径传输,最后在目的地进行重组。7.3 相关知识标识字段标识字段长度16位用于识别IP数据包的编号。每批数据都要有一个标识值,用于让目的主机判断新来的数据属于哪个分组。7.3 相关知识标志字段标志字段3位,最高位是0 0DFMF禁止分片(段、组)标志DF(do
6、 not fragment) DF=1,不能分片 DF=0,可以分片分片(段、组)标志MF(more fragment) MF=1,非最后分片 MF0,最后分片7.3 相关知识片偏移字段片偏移字段13位说明分片在整个数据包中的相对位置。片偏移值是以8B为单位来计数的,因此选择的分片长度应该是8B的整数倍。分片在目的地址重组,其中之一条件就是根据偏移值来决定的。7.3 相关知识生存时间(TTL)生存时间(TTL)8位设置数据包在互联网络的传输过程的寿命,通常是用一个数据包可以经过的最多的路由器跳步数来限定的。可以避免数据包在无休止地在网络中死循环流动。该域为“0”时,报文被删除。7.3 相关知识
7、协议字段协议字段 8位表示使用此IP数据包的高层协议类型,常用的协议号如下表所示: 序号 协议名称序号 协议名称 1 ICMP 2 IGMP 4 IP in IP 6 TCP 8 EGP 17 UDP 41 IPv6 46 RSVP 89 OSPF7.3 相关知识头校验和字段(1/2)头校验和字段16位用于存放检查报头错误的校验码。校验的范围是整个IP包的报头。校验和计算: 1)将头校验和的字段置为0。 2)将报头部分的所有数据以16位为单位进行累 加,累加方式是求异或。 3)将累加的结果取反码,就得到头校验和。7.3 相关知识头校验和字段(2/2)当收到一个IP包时,检查报头是否出错。把报头
8、中的所有数据以16位为单位进行累加,若累加的结果为0,则报头没有出错。7.3 相关知识源地址/目的地址地址字段包括源地址和目的地址 32位/32位源地址表示发送数据包的源主机IP地址目的地址表示接收数据包的目的主机的 IP地址7.3 相关知识选项字段选项字段040B,主要用于控制和测试。对于出现报头部分的长度不是32位的整数倍的情况,需要通过填充位来凑齐为32的整数倍。 IP数据包格式图版本报头标长服务类型总长度标识标志片偏移生存时间协议头校验和源IP地址目的IP地址选项填充域数据部分报头0 4 8 16 19 24 31 7.4 课程设计分析 课程设计程序由三部分组成:初始化原始套接字反复监
9、听捕获IP数据包解析IP数据包预备知识套接字(1/2) 网络的SOCKET数据传输是一种特殊的 I/O。 SOCKET也是一种文件描述符,socket具有一个类似于打开文件的函数调用socket(),该函数返回一个整型的socket描述符,随后的连接建立,数据传输等 操作都是通过该socket实现的。预备知识套接字(2/2) 常用的socket类型有三种:流式socket(SOCK_STREAM)-面向连接的socket,针对 于面向连接的TCP服务;数据报式socket(SOCK_DGRAM)-无连接的socket,对 应于无连接的UDP服务。原始套接字(raw socket)保存数据包中的
10、完整IP头,前面两种套接字只能收到用户数据。因此可以通过原始套接字对IP层数据进行分析7.4 课程设计分析 套接字(socket)(1/7)为了获取网络中的IP数据包,必须对网卡进行编程,我们使用套接字(socket) 编程。通常网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式发出的数据包。对于其它形式的数据包,如已到达网络接口但却不是发送到此地址的数据包,网络接口在验证目的地址非自身地址后将不响应,即应用程序无法收取与自己无关的数据包。要想获取流经网络设备的所有数据包,必须将网卡设为混杂模式。7.4 课程设计分析 套接字(socket) (2/7) 套接字分为3种:流套
11、接字(Stream Socket)数据报套接字(Datagram Socket)原始套接字(Raw Socket) 要进行IP层数据包的接收/发送,应使用原始套接字。7.4 课程设计分析 原始套接字(Raw Socket) (3/7) 创建原始套接字的代码如下:SOCKET sock;sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL, 0,WSA_FLAG_OVERLAPPED);第1个参数AF_INET指定通信发生的区字段;是 针对Internet网络,允许在远程主机之间通信。第2个参数SOCK_RAW 是套接字类型,在三种套接字类型中,我们选
12、择第3个原始套接字类型: SOCK_STREAM,SOCK_DGRAM,SOCK_RAW 7.4 课程设计分析 原始套接字(Raw Socket) (4/7) 第3个参数IPPROTO_IP依赖于第2个参数,用于指定套接字所使用的特定协议,这里使用IP协议。第4个参数为WSAPPROTOCOL_INFO位,该位可以置空。第5个参数保留,永远置0。7.4 课程设计分析 原始套接字(Raw Socket) (5/7) 第6个参数WSA_FLAG_OVERLAPPED是标志位,表明可以使用发送接收超时设置。注意:本课程设计把这个标志位设置为NULL,因为本设计没有考虑超时情况。7.4 课程设计分析
13、原始套接字(Raw Socket) (6/7) 创建原始套接字后,IP头就会包含在接收的数据中。我们可以设置IP头操作选项,调用setsockopt函数。其中flag设置为true,并设定IP_HDRINCL选项,表明用户可 以亲自对IP头进行处理。BOOL flag=true;setsockopt(sock, IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag);7.4 课程设计分析 原始套接字(Raw Socket) (7/7) 使用如下代码完成对socket初始化工作: /获取主机名char hostName128; gethostname(ho
14、stName,100);hostent * pHostIP;pHostIP=gethostbyname(hostName);/填充SOCKADDR_IN结构的内容sockaddr_in addr_in;addr_in.sin_addr=*(in_addr*)pHostIP-h_addr_list0;addr_in.sin_family=AF_INET;addr_in.sin_port=htons(6000);/绑定socketbind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in);7.4 课程设计分析注意(1/3)填写sockaddr_in内容,其地址值应填
15、写为本机IP地址。本机IP地址可以通过gethostbyname()函数获取;端口号可以随便填写,但不能与系统冲突;协议族应填写为AF_INET。sockaddr_in结构的值必须是以网络字节顺序表示的值。使用htons()函数可以将无符号短整型的主机数据转换为网络字节顺序的数据。最后使用bind()函数将socket绑定到本地网卡上。7.4 课程设计分析注意(2/3)绑定网卡后,需要用WSAIoctl()函数把网卡设置为混杂模式,使网卡可以接收所有网络数据,其关键代码如下:#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)DWORD dwBufferLen10;m
16、emset(&dwBufferLen,0,sizeof(dwBufferLen);DWORD dwBufferInLen=1;DWORD dwBytesReturned=0;WSAIoctl(sock,IO_RCVALL,&dwBufferInLen, sizeof(dwBufferInLen),&dwBufferLen, sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL);7.4 课程设计分析注意(3/3)如果接收的数据包中的协议类型和定义的原始套接字匹配,那么接收到的数据就拷贝到套接字中。因此,网卡就可以接收所有经过的IP包。7.4 课程设计分析
17、 接收数据包(1/2)程序使用recv()函数接收结果IP包。该函数有4个参数: 第1个参数接收操作所用的套接字描述符; 第2个参数接收缓冲区的地址; 第3个参数接收缓冲区的大小, 第4个参数是个附加标志,如果对所发送的数据没有特殊要求,直接设为0。因为IP数据包的最大长度是65535B,因此缓冲区不能小于此值。设置缓冲区后,可利用循环来反复监听数据包。7.4 课程设计分析 接收数据包(2/2)用recv()函数实现接收功能代码如下:#define BUFFER_SIZE 65535char bufferBUFFER_SIZE;/设置缓冲区 printf(n); while(true) rec
18、v(sock,buffer,BUFFER_SIZE,0); /接收数据包/然后是解析接收的数据包7.4 课程设计分析 定义IP头部的数据结构 IP头部的数据结构代码如下页所示 只考虑IP头部结构,不考虑数据部分 在捕获IP数据包后,可以通过指针把缓 冲区中的内容强制转化为IP_HEADER 数据结构。IP_HEADER ip=*(IP_HEADER* )buffer;7.4 课程设计分析7.4 课程设计分析IP包的解析 解析IP包的字段有两种策略:长度为8位/16位/32位的字段(或子字段) ,可以利用IP_HEADER的成员直接获取。长度不是8位倍数的字段(或子字段),利用 C语言中的移位以
19、及与,或操作完成。7.4 课程设计分析IP_HEADER解析IP头各个字段代码程序 Ip.version4;/获取版本字段ip.HdrLen&0 x0f;/获取头部长度字段ip.ServiceType5; /获取服务字段中的优先级子域(ip.ServiceType1)&0 x0f; /获取服务字段中的TOS域ip.TotalLen; /获取总长度字段ip.ID; /获取标识字段DF=(ip.Flags14)&0 x01; /解析标志字段MF=(ip.Flags13)&0 x01;ip.FragOff&ox1fff; /获取分段偏移字段ip.TimeToLive; /获取生存时间字段ip.Protocol; /获取协议字段ip.HdrChksun; /获取头校验和字段inet_ntoa(*(in_addr*)&ip.SrcAddr); /解析源IP地字段inet_ntoa(*(in_addr*)&ip.DstAddr); /解析目的IP地址字7.4 课程设计分析参考程序流程图开始构造程序运行环境,生成输出文件创建原始套接字,并初始化捕获IP包解析IP包输出IP包信息Ctrl+Break结束NY上机实验步骤 (1/3)1. 建立工程ch72. 工程中添加文件名为“ch7.cpp”的文件3. 键入ch7.cpp源文件的内容4. 不断调试
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高性能运动织物及服饰项目可行性研究报告模板-立项备案
- 2026年人教版小学英语三年级上册第11单元同步练习题
- 2025-2026年心理测评与评估实践测试题
- 2026年重庆市苏教版高中数学必修第五册第7章同步练习题
- 2025-2026年四川省人教版高中语文必修第三册同步练习题
- 2025-2026年部编版高中英语完形填空专项训练习题
- 2026年海南省北师大版八年级物理下册力学专项测试卷
- 2025-2026年高中语文古诗词阅读理解能力测试卷
- 2025-2026年部编版六年级数学下册第11单元数的认识测试卷
- 2025-2026年浙江省人教版八年级化学下册第2单元测试卷
- GB/T 31880-2026检验检测机构诚信基本要求
- 2026秋新教材人教版五年级上册数学《观察简单组合体》教学设计(3课时)
- 1.4 人口普查 课件(共25张) 北师大版数学四年级上册
- 妊娠期妇女心肺复苏急救指南(2025版)中文版+围产期急救操作规范
- 精益基础考试题及答案
- 2026年四川省成都市中考语文真题(试题+答案)
- 2025中国联通广东省分公司校园招聘(174个岗位)笔试历年参考题库附带答案详解
- 2026年国家电网职称考试(工业工程技术-营销工程)(副高)经典试题及答案
- 2026科特迪瓦能源行业的现状贸易分析及投资策略配置布局研究方案
- 2026年幼儿园教职工安全
- 2026年秋初中开学典礼教务主任发言稿
评论
0/150
提交评论