解析IP数据包剖析

上传人:cn****1 文档编号:464854834 上传时间:2023-07-02 格式:DOCX 页数:11 大小:60.75KB
返回 下载 相关 举报
解析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 包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校

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

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

4、结构如图2所示.B7b6b5b4b3b2b1b0优先级DTRC0图 2 服务类型字段结构优先级共有 8 种 ,优先级越高表明数据包越重要.表 1 中列出了各种优先级所代表的意义.表一 优先子域的说明位数 (b7b6b5)意义111网络控制110网络间控制101重要 (CRITIC/ECP)100即时 ,优先011即时010立刻001优先000普通在 4 位服务类型子域中b4,b3,b2,b1 分别表示 D( 延迟 ),T( 吞吐量 ),R( 可靠性 )与 C(成本 ).表 2 列出了服务器类型自域的构成 .位数 ( b4b3b2b1)意义1111安全级最高1000延迟最小0100吞吐量最大00

5、01金钱成本最小0000普通服务总长度字段为2B, 它定义了以字节为单位的数据包的总长度.IP 数据包的最大长度为65535B.标识字段的长度为 16位,用于识别 IP 数据包的编号 .每批数据都要有一个标识值,用于让目的主机判断新来的数据属于哪个分组.报头中的标志字段如图7-3 所示 .标志字段共3 位 ,最高位是0.禁止分片标志DF(do notfragment) 字段的值若为 1,表示不能对数据包分片;若 DF 值为 0,则表明可以分片 .分片标志MF( more fragment) 的值为 1,表示接收到的不是最后一个分片;若 MF 值为 0,表示接收到的是最后一个分片 .片偏移字段共

6、13 位 ,说明分片在整个数据包中的相对位置.片偏移值是以 8B为单位来记数的 ,因此选择的分片长度应该是8B 的整数倍 .生存时间 (TTL) 字段为8位 ,用来设置数据包在互联网络的传输过程的寿命,通常是用一个数据包可以经过的最多的路由器跳步数来限定的.协议字段为 8位,表示使用此 IP 数据包的高层协议类型,常用的协议号如表二所示 .序号协议名称序号协议名称1ICMP17UDP2IGMP41IPV64IP inIP46RSVP6TCP89OSPFA8EGP头校验和字段为表二典型的协议号16 位,用于存放检查报头错误的校验码。检验的范围是整个IP 包的报头。校验和按如下方法计算:1)将头校

7、验和的字段置为0。2)将报头部分的所有数据以16 位为单位进行累加,累加方式是求异或。3)将累加的结果取反码,就是头校验和。当收到一个 IP 包时,要检查报头是否出错,就把报头中的所有数据以 16 位为单位进行累加,若累加的结果为 0,则报文没有出错。地址字段包括源地址和目的地址。 源地址和目的地址的长度都是 32 位,分别表示发送数据包的源主机和目的主机的 IP 地址。选项字段的长度范围为 040B ,主要用于控制和测试。在使用选项字段的过程中,有可能出现报头部分的长度不是 32 位的整数倍的情况。如果出现这种情况,就需要通过填充位来凑齐。任务设计分析:为了获取网络中的 IP 数据包,必须对

8、网卡进行编程,在这里我们使用套接字(socket)进行编程。 但是,在通常情况下, 网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式出发的数据包。对于其他形式的数据包, 如已到达网络接口但却不是发送到此地址的数据包, 网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。我们要想获取流经网络设备的所有数据包,就需要将网卡设置为混杂模式。本程序主要由三部分构成:初始化原始套接字,反复监听捕获数据包和解析数据包。下面就结合核心代码对程序的具体实现进行讲解,同时使程序流程更加清晰, 去掉了错误检查等保护性代码。开始程序流程图:构造程序运

9、行环境,生成输出文件创造原始套接字,并初始化捕获IP包N解析IP包输出 IP包信息C r +CY结束具体程序代码:#include#include#include#include#include /#include #pragma comment(lib,ws2_32) / 指定连接到网络应用和internet#define IO_RCV ALL _WSAIOW(IOC_VENDOR,1)typedef struct IP_HEADunion / 定义联合unsigned char Version;unsigned char HeadLen;unsigned char ServiceType;

10、unsigned short TotalLen;unsigned short Identifier;unionunsigned short Flags;unsigned short FragOffset;unsigned char TimeToLive;unsigned char Protocol;unsigned short HeadChecksum;unsigned int SourceAddr;unsigned int DestinAddr;unsigned char Options;ip_head; / 定义 IP 头部的数据结构void main(int argc,char *arg

11、v)using namespace std;ofstream outfile(e:log,ios:out);if(argc!=2)coutendl 请以下格式输入命令行:PackParse packet_sumendl;/packet_sum 为要分析IP 包的个数。return;WSADATA WSAData;if(WSAStartup(MAKEWORD(2,2), &WSAData)!=0)coutendlWSASTartup初始化失败 endl;return;SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);/ 三个参分别为通信发生的区字段,套接字的类型,与IP 协议if(sock=INV ALID_SOCKET)coutendl 创建 Socket 失败 !endl;closesocket(sock);WSACleanup();BOOL flag=T

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿/致辞

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