解析IP数据包剖析

上传人:桔**** 文档编号:562781283 上传时间:2023-08-17 格式:DOCX 页数:11 大小:80.72KB
返回 下载 相关 举报
解析IP数据包剖析_第1页
第1页 / 共11页
解析IP数据包剖析_第2页
第2页 / 共11页
解析IP数据包剖析_第3页
第3页 / 共11页
解析IP数据包剖析_第4页
第4页 / 共11页
解析IP数据包剖析_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《解析IP数据包剖析》由会员分享,可在线阅读,更多相关《解析IP数据包剖析(11页珍藏版)》请在金锄头文库上搜索。

1、解析 IP 数据包任务目的:设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题, 从而 IP 层的工作原理有更好的理解和认识。任务要求:本实验的目标是捕获网络中的IP数据包,解析数据包的内容,见个结果显示在 标准输出上,并同时写入日志文件。程序的具体要求如下:以命令行形式运行:ipparselogfile,其中ipparse是程序名,而logfile则代 表记录结果的日志文件。在标准输出、和日志文件中写入捕获的IP包的版本、头长度、服务类型、 数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协 议类型、头校验和、源IP地址和目的IP地址等内容。

2、 当程序接收到键盘输入 Ctrl+C 时退出。设计相关知识:互联网络层是TCP/IP协议参考模型中的关键部分.IP协议把传输层送来的消息组装 成IP数据包,并把IP数据包传送给数据链层.IP协议在TCP/IP协议族中处于核心地位,IP 协议制定了统一的IP数据包格式,以消除个通信子网中的差异,从而为信息发送方和接收 方提供了透明的传输通道编制本程序前,首先要对IP包的格式有一定了解,图1给出了 IP 协议的数据包格式.IP 数据包的第一个字段是版本字段,其度是 4 位,表示所使用的 IP 协议的版本.目前 的版本是IPV4,版本字段的值是4,下一代版本是IPV6,版本字段值是6本程序主要针对版

3、 本是 IPV4 的数据包的解析.报头标长字段为4位,它定义了以4B为一个单位的IP包的报文长度报头中除了选 项字段和填充域字段外,其他各字段是定长的因此,IP数据包的头长度在2040B之间, 是可变的.04816192431版本报头标长服务类型总长度标识标志片偏移生存时间协议头校验和源IP地址目的IP地址选项填充域数据部分图 1 IP 数据包的格式服务类型字段共8位,用于指示路由器如何处理该数据包.该字段长度由4位服务类型(TOS) 子域和3位优先级子域组成,1位为保留位,该字段结构如图2所示.B7 b6 b5 b4b3b2b1b0优先级DTRC0图 2 服务类型字段结构优先级共有8 种,优

4、先级越高表明数据包越重要.表1中列出了各种优先级所代表的意义. 表一 优先子域的说明位数(b7b6b5)意义111网络控制110网络间控制101重要(CRITIC/ECP)100即时,优先011即时010立刻001优先000普通在4位服务类型子域中b4,b3,b2,bl分别表示D(延迟),T(吞吐量),R(可靠性)与C(成本). 表 2 列出了服务器类型自域的构成.位数(b4b3b2b1)意义1111安全级最高1000延迟最小0100吞吐量最大0001金钱成本最小0000普通服务总长度字段为2B,它定义了以字节为单位的数据包的总长度.IP数据包的最大长度为 65535B.标识字段的长度为16位

5、,用于识别IP数据包的编号每批数据都要有一个标识值,用于让 目的主机判断新来的数据属于哪个分组.报头中的标志字段如图7-3 所示.标志字段共 3 位,最高位是 0.禁止分片标志 DF(do not fragment)字段的值若为1,表示不能对数据包分片;若DF值为0,则表明可以分片分片标志 MF( more fragment)的值为1,表示接收到的不是最后一个分片;若MF值为0,表示接收到的是 最后一个分片.片偏移字段共13位,说明分片在整个数据包中的相对位置.片偏移值是以8B为单位来记 数的,因此选择的分片长度应该是8B的整数倍.生存时间(TTL)字段为8位,用来设置数据包在互联网络的传输过

6、程的寿命,通常是用一 个数据包可以经过的最多的路由器跳步数来限定的.协议字段为8位,表示使用此IP数据包的高层协议类型,常用的协议号如表二所示.序号协议名称序号协议名称1ICMP17UDP2IGMP41IPV64IP inIP46RSVP6TCP89OSPFA8EGP表二 典型的协议号头校验和字段为16位,用于存放检查报头错误的校验码。检验的范围是整个IP包的报头。校验和按如下方法计算:1)将头校验和的字段置为 0。2)将报头部分的所有数据以16 位为单位进行累加,累加方式是求异或。3)将累加的结果取反码,就是头校验和。当收到一个IP包时,要检查报头是否出错,就把报头中的所有数据以16位为单位

7、进行 累加,若累加的结果为0,则报文没有出错。地址字段包括源地址和目的地址。源地址和目的地址的长度都是32位,分别表示发送数 据包的源主机和目的主机的IP地址。选项字段的长度范围为040B,主要用于控制和测试。在使用选项字段的过程中,有可 能出现报头部分的长度不是32位的整数倍的情况。如果出现这种情况,就需要通过填充位 来凑齐。任务设计分析:为了获取网络中的IP数据包,必须对网卡进行编程,在这里我们使用套接字(socket) 进行编程。但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的 数据包或是以广播形式出发的数据包。对于其他形式的数据包,如已到达网络接口但却不是 发送到

8、此地址的数据包,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是 说应用程序无法收取与自己无关的数据包。我们要想获取流经网络设备的所有数据包,就需 要将网卡设置为混杂模式。本程序主要由三部分构成:初始化原始套接字,反复监听捕获数据包和解析数据包。下面就结合核心代码对程序的具体实现进行讲解,同时使程序流程更加清晰,去掉了错误检查等保护性代码。程序流程图具体程序代码:#include#include#include#include#include /#include #pragma comment(lib,ws2_32) /指定连接到网络应用和 internet#define IO_RC

9、VALL _WSAIOW(IOC_VENDOR,1)typedef struct IP_HEADunion /定义联合unsigned char Version;unsigned char HeadLen;unsigned char ServiceType;unsigned short TotalLen;unsigned short Identifier;unionunsigned short Flags;unsigned short FragOffset;unsigned char TimeToLive;unsigned char Protocol;unsigned short HeadCh

10、ecksum;unsigned int SourceAddr;unsigned int DestinAddr;unsigned char Options;ip_head; /定义 IP 头部的数据结构void main(int argc,char *argv)using namespace std;ofstream outfile(e:log,ios:out);if(argc!=2)coutvvendlvv请以下格式输入命令行:PackParse packet_sumvvendl; packet_sum 为要分析 IP 包的个数。return;WSADATA WSAData; if(WSASt

11、artup(MAKEWORD(2,2), &WSAData)!=0)coutvvendlvvWSASTartup 初始化失败vvendl;return;SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);三个参分别为通信发生的区字 段,套接字的类型,与IP协议if(sock=INVALID_SOCKET)coutwendlvv创建 Socket 失败!h_addr_list0;if(bind(sock,(PSOCKADDR)&host_addr,sizeof(host_addr)=SOCKET_ERROR)coutvvendlvvbind 操作失败:

12、vvWSAGetLastError()vvendl;closesocket(sock); /绑定网卡WSACleanup();DWORD dwBufferLen10;DWORD dwBufferInLen=1;DWORD dwBytesReturned=0; if(WSAIoctl(sock , IO_RCVALL ,&dwBufferInLen , sizeof(dwBufferInLen) , &dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL)=SOCKET_ERROR)coutvvendlvvWSAIoctl 操作失败:vvWSAGetLastError()vvendl;closesocket(sock); /将网卡设为混杂模式,以接受所有数据WSACleanup();coutvvendlvv开始解析 IP 包:vvendl;char buffer65535; /设置缓冲区int packsum=atoi(argv1); /字符串转换为整形for(int i=

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

当前位置:首页 > 学术论文 > 其它学术论文

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