任务三计算机网络实验IP数据报捕获与分析
实验三网络数据包的捕获与分析

实验三 网络数据包的捕获与分析一、实验目的和要求通过本次实验,了解sniffer 的基本作用,并能通过sniffer 对指定的网络行为所产生的数据包进行抓取,并分析所抓取的数据包。
二、实验内容A :1、首先打开sniffer 软件,对所要监听的网卡进行选择2、选择网卡按确定后,进入sniffer 工作主界面,对主界面上的操作按钮加以熟悉。
B :设置捕获条件进行抓包基本的捕获条件有两种:1、链路层捕获,按源MAC 和目的MAC 地址进行捕获,输入方式为十六进制连续输入,如:00E0FC123456。
2、IP 层捕获,按源IP 和目的IP 进行捕获。
输入方式为点间隔方式,如:10.107.1.1。
如果选择IP 层捕获条件则ARP 等报文将被过滤掉。
链任意捕获条件编辑协议捕获编辑缓冲区编辑基本捕获条件路层捕获IP 层捕获数据流方向链路层捕获地址条件高级捕获条件在“Advance ”页面下,你可以编辑你的协议捕获条件,如图:选择要捕获的协议捕获帧长度条件错误帧是否捕获保存过滤规则条件高级捕获条件编辑图在协议选择树中你可以选择你需要捕获的协议条件,如果什么都不选,则表示忽略该条件,捕获所有协议。
在捕获帧长度条件下,你可以捕获,等于、小于、大于某个值的报文。
在错误帧是否捕获栏,你可以选择当网络上有如下错误时是否捕获。
在保存过滤规则条件按钮“Profiles”,你可以将你当前设置的过滤规则,进行保存,在捕获主面板中,你可以选择你保存的捕获条件。
C:捕获报文的察看:Sniffer软件提供了强大的分析能力和解码功能。
如下图所示,对于捕获的报文提供了一个Expert专家分析系统进行分析,还有解码选项及图形和表格的统计信息。
专家分析系统专家分析系统捕获报文的图形分析捕获报文的其他统计信息专家分析专家分分析系统提供了一个只能的分析平台,对网络上的流量进行了一些分析对于分析出的诊断结果可以查看在线帮助获得。
在下图中显示出在网络中WINS查询失败的次数及TCP重传的次数统计等内容,可以方便了解网络中高层协议出现故障的可能点。
IP 数据报捕获与分析实验报告

实验报告专业班级成绩评定______ 学号姓名教师签名______ 实验题目IP 数据报捕获与分析实验时间一、实验目的:1.掌握IP数据报格式。
2.理解IP协议的工作原理及工作过程。
3.掌握使用wireshark捕获IP等数据报并分析。
二、实验环境:以太网。
三、实验内容:1.熟悉WinPcap的体系构架和提供的函数。
2.学习IP数据报校验和计算方法。
3.掌握使用wireshark捕获IP等数据报。
4.对捕获的IP数据报进行分析。
四、实验步骤:1.在PING之前先运行wireshark熟悉页面并进行一些设置a.单击Capture Filter过滤器:可以设置捕捉一些特殊规则的数据报。
b.在选中Capture packets in promiscuous mode:可以设置为混合全处理模式。
c.可以点击Start开始捕捉。
过一段时间后,点击Stop停止,观察捕捉到的数据报,并进行分析。
2.使用wireshark捕获和分析IP数据包。
a.打开wireshar并开始捕获数据包。
b.然后在系统的“开始”—“运行”—输入“CMD”命令,进入DOS命令窗口,并输入“ping”命令测试网络的情况.c.如“ping 192.168.0.1”。
Ping 命令的使用d.再回到wireshar点击停止后查看捕获到的数据,双击打开“ping”后的数据包,分析数据包的内容。
分片的数据包(以下图片全部通过wireshark捕获数据包,然后用QQ中的截图功能截取)IP协议节点IP协议节点上面节点说明如下:树节点名称说明Version IP版本,IPv4Header Length 20个字节的IP头,没有其他选项Total Length 该IP包携带的64字节Flags 不分片标志被设置没有被设置,该IP在通过各种类型的网络时可以分片传输;如果该网络的最大数据包小于该IP包的长度,该数据包将被分片传输;Time to live TTL值为64,最多数据传输64个节点就被抛弃。
任务三计算机网络实验IP数据报捕获与分析

任务三计算机网络实验IP数据报捕获与分析一、实验目的本实验的目的是通过使用网络抓包工具捕获IP数据报,了解IP协议的工作过程,分析数据报的结构和内容。
二、实验设备和工具1.计算机2.网络抓包工具:Wireshark三、实验原理IP(Internet Protocol)是网络层的核心协议,在互联网中承担着数据包的传输任务。
IP协议负责将数据包从源主机传输到目标主机,保证数据在不同主机之间的正确传输。
IP数据报是IP协议传输的基本单位,由IP头和数据部分组成。
IP头部包含以下重要字段:1.版本(4位):表示IP协议的版本号,IPv4为4,IPv6为62.首部长度(4位):表示IP头部的长度,以32位的字节为单位。
3.区分服务(8位):用于标识优先级和服务质量等信息。
4.总长度(16位):指明整个IP数据报的长度。
5.标识(16位):用于标识同一个数据报的分片。
6.标志位(3位):标记是否进行数据报的分片。
7.片偏移(13位):表示数据报组装时的偏移量。
8.生存时间(8位):表示数据报在网络中的存活时间。
9.协议(8位):指明IP数据报中携带的数据部分所使用的协议,如TCP、UDP等。
10.头部校验和(16位):用于对IP头部的校验。
11.源IP地址(32位):指明数据报的发送者的IP地址。
12.目的IP地址(32位):指明数据报的目标IP地址。
四、实验步骤1.安装Wireshark软件。
2.打开Wireshark软件,选择需要进行抓包的网络接口。
3.点击“开始”按钮,开始抓包。
4.进行相关网络操作,产生数据包。
5.停止抓包。
6.选中其中一个数据包,进行分析。
五、数据包分析Wireshark软件可以对捕获到的数据包进行详细的分析,提供了丰富的信息和统计数据。
以下是对数据包的一些常规分析内容:1.源IP地址和目的IP地址:根据协议规定,每个IP数据报必须携带源IP地址和目的IP地址,通过分析这两个字段可以确定数据包的发送方和接收方。
计算机网络课程设计报告-IP数据包的捕获与分析

CENTRAL SOUTH UNIVERSITY计算机网络课程设计报告题目IP数据包的捕获与分析学生姓名廖成班级学号0902130408指导教师穆帅设计时间2015年11月目录第一章绪论 (3)1.1 课题研究背景 (3)1.2 课题研究的意义 (3)第二章课程设计的目的与要求 (3)2.1 课程设计的目的 (3)2.2 课程设计的要求 (4)第三章课程设计的内容 (4)3.1 课程设计的内容 (5)3.2 内容的要求 (5)第四章程序设计与分析 (5)4.1 IP数据包 (5)4.1.1 数据包的格式说明 (5)4.1.2 头部数据结构的定义 (7)4.2 部分程序实现 (7)4.2.1 套接字的使用 (7)4.2.2 数据库的使用 (8)4.2.3 各部分详细实现 (9)4.4 程序流程图 (12)4.4.1 主程序流程图 (12)4.4.2 捕获并分析数据包头部模块流程图 (13)4.4.3 头部信息存数据库模块 (13)第五章实验结果 (14)5.1 程序截图 (14)第六章总结 (16)6.1 实验心得 (16)第七章附录 (17)参考文献 (17)第一章绪论1.1 课题研究背景随着计算机技术的发展,网络的应用迅速普及,网络已日益成为生活中不可或缺的工具。
同时,网络的安全性与可靠性日益受到人们的重视,安全性指的是网络上的信息不被泄露、更改和破坏,可靠性指的是网络系统能够连续、可靠地运行,网络服务不被中断。
网络数据包捕获、监听与分析技术是网络安全维护的一个基础技术同时也是网络入侵的核心手段。
所以研究有关数据包捕获和分析技术对保证网络的健康、安全运行是很有意义的。
1.2课题研究的意义计算机之间进行通信时,交互的所有信息都封装在数据包中。
因此,通过采集网络数据并对其进行相应的分析,可以清楚地了解到进行通信的计算机的通信目的。
通过分析采集到的数据包可以确定网络是否受到入侵;其次也可以通过采集到的数据包来分析应用程序可能出现的问题及原因;此外,通过网络数据的采集和统计可以清楚地了解整个网络在各个时段内的网络负载情况,从而判断网络使用得是否合理。
计算机实验3:使用Wireshark分析IP协议

实验三:使用Wireshark分析IP协议一、实验目的1、分析IP协议2、分析IP数据报分片二、实验环境与因特网连接的计算机网络系统;主机操作系统为windows;使用Wireshark、IE等软件。
三、实验步骤IP协议是因特网上的中枢。
它定义了独立的网络之间以什么样的方式协同工作从而形成一个全球户联网。
因特网内的每台主机都有IP地址。
数据被称作数据报的分组形式从一台主机发送到另一台。
每个数据报标有源IP地址和目的IP地址,然后被发送到网络中。
如果源主机和目的主机不在同一个网络中,那么一个被称为路由器的中间机器将接收被传送的数据报,并且将其发送到距离目的端最近的下一个路由器。
这个过程就是分组交换。
IP允许数据报从源端途经不同的网络到达目的端。
每个网络有它自己的规则和协定。
IP 能够使数据报适应于其途径的每个网络。
例如,每个网络规定的最大传输单元各有不同。
IP 允许将数据报分片并在目的端重组来满足不同网络的规定。
在4_1_JoiningTheInternet下打开已俘获的分组,分组名为:dhcp_isolated.cap。
感兴趣的同学可以在有动态分配IP的实验环境下俘获此分组,此分组具体俘获步骤如下:1、使用DHCP获取IP地址(1)打开命令窗口,启动Wireshark。
(2)输入“ipconfig /release”(ipconfig 在C:\windows\system32下)。
这条命令会释放主机目前的IP地址,此时,主机IP地址会变为0.0.0.0(3)现在回到Windows命令提示符窗口,输入“ipconfig /renew”命令。
这条命令让主机获得一个网络配置,包括新的IP地址。
(4)等待,直到“ipconfig /renew”终止。
然后再次输入“ipconfig /renew” 命令。
(5)当第二个命令“ipconfig /renew” 终止时,输入命令“ipconfig/release” 释放原来的已经分配的IP地址(6)停止分组俘获。
计算机网络课程设计IP数据包的捕获与分析.docx

计算机科学与技术学院课程设计成绩单C+:72~74分C:68~71分C-:64~67分D:60~63分F:<60分武汉科技大学计算机科学与技术学院制表IP数据包捕获与解析程序设计一、需求分析在本次课程设计要求捕获本机网卡的IP包,对捕获的IP包进行解析。
要求输出版本号、总长度、标志位、片偏移、协议、源地址和目的地址七个字段。
要求遵循RFC791的相关IP协议规定,捕获通过本地网卡的IP数据包。
实现对指定数量的IP数据包的捕获过程。
,需要定义好IP数据报等相关的数据结构以对IP数据包的各个字段进行保存,以及该IP数据包的上一层使用的协议名称。
在对IP数据包进行解析时要将捕获的数据流存储在一个缓冲区中。
二、概要设计1.总体流程算法:创建原始套接字并绑定本地网卡,将套接字设置为混杂模式监听网卡并根据输入的数量捕获流经本地的IP包。
IP数据包的格式:NoYes开始创建并初始化原始套接字填充sockaddr_in并绑定socket 设置网卡混杂模式监听网卡捕获和解析IP数据报输出解析字段结束是否达到需要次数IP数据包由首部和数据两部分组成。
首部的前一部分是固定长度,共 20 字节,是所有IP数据报必须具有的。
在首部的固定部分的后面是一些可选字段,其长度是可变的,可选字段之后是数据部分。
其中,首部固定部分中本次课程设计需要解析的各字段的长度及意义如下:(1)版本占4位,指IP协议的版本。
通信双方使用的IP协议版本必须一致。
目前广泛使用的IP协议版本号为4(即IPv4)。
关于IPv6,目前还处于草案阶段。
(2)总长度总长度指首部和数据之和的长度,单位为字节。
总长度字段为16位,因此数据报的最大长度为2^16-1=65535字节。
在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。
当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。
arp,ip,icmp协议数据包捕获分析实验报告数据

arp,ip,icmp协议数据包捕获分析实验报告数据篇一:网络协议分析实验报告实验报告课程名称计算机网络实验名称网络协议分析系别专业班级指导教师学号姓名实验成绩一、实验目的掌握常用的抓包软件,了解ARP、ICMP、IP、TCP、UDP 协议的结构。
二、实验环境1.虚拟机(VMWare或Microsoft Virtual PC)、Windows XX Server。
客户机A客户机B2.实验室局域网,WindowsXP三、实验学时2学时,必做实验。
四、实验内容注意:若是实验环境1,则配置客户机A的IP地址:/24,X为学生座号;另一台客户机B的IP地址:(X+100)。
在客户机A上安装EtherPeek(或者sniffer pro)协议分析软件。
若是实验环境2则根据当前主机A的地址,找一台当前在线主机B完成。
1、从客户机A ping客户机B ,利用EtherPeek(或者sniffer pro)协议分析软件抓包,分析ARP 协议;2、从客户机A ping客户机B,利用EtherPeek(或者sniffer pro)协议分析软件抓包,分析icmp协议和ip协议;3、客户机A上访问,利用E(转载于: 小龙文档网:arp,ip,icmp协议数据包捕获分析实验报告数据)therPeek(或者sniffer pro)协议分析软件抓包,分析TCP和UDP 协议;五、实验步骤和截图(并填表)1、分析arp协议,填写下表12、分析icmp协议和ip协议,分别填写下表表一:ICMP报文分析233、分析TCP和UDP 协议,分别填写下表4表二: UDP 协议 5篇二:网络层协议数据的捕获实验报告篇三:实验报告4-网络层协议数据的捕获实验报告。
计算机网络技术与实验——数据包的捕获与分析

计算机⽹络技术与实验——数据包的捕获与分析计算机⽹络技术与实验——数据包的捕获与分析1. 实验介绍本次实验的⽬的在于学习WinPcap的使⽤⽅法,利⽤它捕获以太⽹中的数据包并进⾏简单的解析,最终使⽤MFC画界⾯,展⽰捕获后解析出来的信息。
2. 使⽤WinPcap + MFC进⾏数据包的捕获与分析2.1 WinPcap简单介绍WinPcap是⼀个开源的数据包捕获体系结构,它的主要功能是进⾏数据包捕获和⽹络分析。
它包括了内核级别的包过滤、低层次的动态链接库(packet.dll)、⾼级别系统⽆关的函数库(wpcap.dll)等。
在编写程序之前我们先按以下步骤配置好WinPcap的开发环境。
下载WinPcap并安装打开VS2015,新建->项⽬->MFC应⽤程序(基于对话框,经典菜单)在项⽬上,右键->属性⼯具->属性->项⽬和解决⽅案-> VC++⽬录->包含⽂件->添加WinPcap开发包中的Include⽬录⼯具->属性->项⽬和解决⽅案-> VC++⽬录->库⽂件->添加WinPcap开发包中的lib⽬录项⽬->项⽬属性->配置属性->预处理定义->添加WPCAP和HAVE_REMOTE项⽬->项⽬属性->配置属性->连接器->命令⾏->附加选项框中加⼊wpcap.lib在程序中要加⼊pcap.h头⽂件#include pcap.h2.2 WinPcap程序设计思路使⽤WinPcap捕获数据包⼀般有三个步骤:获取设备列表打开⽹络适配器在打开的⽹络适配器上捕获⽹络数据包2.2.1 获取设备列表在开发以WinPcap为基础的应⽤程序时,第⼀步要求的就是获取⽹络接⼝设备(⽹卡)列表。
这可以调⽤WinPcap提供的pcap_findalldevs_ex()函数,该函数原型如下:int pcap_findalldevs_ex(char * source; //指定从哪⼉获取⽹络接⼝列表struct pcap_rmauth auth; //⽤于验证,由于是本机,置为NULLpcap_if_t ** alldevs; //当该函数成功返回时,alldevs指向获取的列表数组的第⼀个//列表中每⼀个元素都是⼀个pcap_if_t结构char * errbuf //错误信息缓冲区);在上⾯注释中提到的pcap_if_t结构定义如下:struct pcap_if{struct pcap_if *next; //指向链表中下⼀个元素char *name; //代表WinPcap为该⽹络接⼝卡分配的名字char *description; //代表WinPcap对该⽹络接⼝卡的描述struct pcap_addr* addresses; //addresses指向的链表中包含了这块⽹卡的所有IP地址u_int flags; //标识这块⽹卡是不是回送⽹卡}2.2.2 打开⽹卡在获取设备列表之后,可以选择感兴趣的⽹卡打开并对其上的⽹络流量进⾏监听。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
任务三网络编程一、实验目的捕获本机网卡的IP包,对捕获的IP包进行解析。
要求必须输出以下字段:版本号、总长度、标志位、片偏移、协议、源地址和目的地址。
二、实验环境平台:Windows编程环境:VC 6.0语言:C++三、实验原理3.1 数据报格式以太帧由一个包含三个字段的帧头开始,前两个字段包含了物理地址,各六个字节,头部的第三个字段包含了 16 位的以太帧类型,帧头后面是数据区。
根据帧类型可以判断是哪种数据包,一般常用的有 0X0080(IP 数据包)、0X0806(ARP 请求/应答)和 0X8035(RARP 请求/应答)三种类型。
TCP/IP 协议簇中位于网络层的协议,也是最为核心的协议。
所有的 TCP, UDP, ICMP及 IGMP 数据都以 IP 数据报格式传输。
IP 协议提供了无连接的、不可靠的数据传输服务。
同时IP 协议的一个重要功能是为网络上的包传递提供路由支持。
TCP/IP 协议使用 IP 数据报这个名字来指代一个互联网数据包。
IP 数据报由两部分组成,前面的头部和后面的数据区,头部含有描述该数据报的信息,包括源 IP 地址和目的 IP 地址等。
在 IP 数据报的报头中的众多信息可根据协议类型字段区分出该数据包的类型,常用的有TCP 包、 UDP 包、 ICMP 包等,各格式分别如下所示:IP数据报格式TCP数据报格式ICMP数据报格式UDP数据报格式3.2 捕获数据包方法目前常用的捕获数据包的方法有原始套接字、LibPcap、WinPcap和JPcap等方法。
本次实验选用套接字方法。
套接字是网络应用编程接口。
应用程序可以使用它进行网络通信而不需要知道底层发生的细节。
有时需要自己生成一些定制的数据包或者功能并希望绕开Socket提供的功能,原始套接字(RawSocket)满足了这样的要求。
原始套接字能够生成自己的数据报文,包括报头和数据报本身的内容。
通过原始套接字,可以更加自如地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制。
网络数据包截获机制一般指通过截获整个网络的所有信息流,根据信息源主机,目标主机,服务协议端口等信息,简单过滤掉不关心的数据,再将用户感兴趣的数据发送给更高层的应用程序进行分析。
一般数据包的传输路径依次为网卡、设备驱动层、数据链路层、 IP 层、传输层、最后到达应用程序。
IP 数据包的捕获就是将经过数据链路层的以太网帧拷贝出一个备份,传送给 IP 数据包捕获程序进行相关的处理。
IP 数据包的捕获程序一般由数据包捕获函数库和数据包分析器组成。
数据包捕获函数库是一个独立于操作系统的标准捕获函数库。
主要提供一组可用于查找网络接口名称、打开选定的网络接口、初始化、设置包过滤条件、编译过滤代码、捕获数据包等功能函数。
对捕获程序而言,只需要调用数据包捕获函数库的这些函数就能获得所期望的 IP 数据包。
这种捕获程序与数据包捕获函数库分离的机制,使得编写的程序具有很好的可移植性。
IP 数据包捕获程序的核心部分就是数据包分析器。
数据包分析器应具有识别和理解各种协议格式(IP、 TCP、UCP、 ICMP 协议)和帧格式的能力,并对捕获的数据进行分析和统计处理。
编写数据包捕获程序的主要工作就是如何实现数据包分析器的功能。
3.3 数据包捕获与解析的程序设计首先对以太网帧头进行结构体定义,总共有以下 13 项内容:Version、HeadLen、ServiceType、 TotalLen、Identifier、Flags、FragOffset、TimeToLive、Protocol、HeadChecksum、SourceAddr、DestinAddr、Options。
根据数据包的捕获机制,分别对以上 13 个内容编写捕获的 C 语言程序,进行一一捕获,通过开始的运行程序中运行编译程序后所得到的.exe 文件,就可以看到捕获到的信息。
捕获成功之后,最后将其各个信息进行解析,并写到一个文件之中。
以上各个程序的编写都是在 Visual Stdio C++ 6.0 编译器中完成。
3.4 网卡设置为了获取网络中的IP数据包,必须对网卡进行编程,在这里使用套接字进行编程。
但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式发出的数据包。
对于其他形式的数据包,如已到达网络接口,但却不是发送到此地址的数据包,网络接口在骓投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。
要想获取网络设备的所有数据包,就需要将网卡设置为混杂模式。
四、实验结果及分析程序运行结果截图:附件:网络数据包捕获与解析的完整程序#include <iostream>#include <winsock2.h>#include <ws2tcpip.h>#include <cstdlib>#include <fstream>#include <string>#pragma comment(lib, "ws2_32")#define IO_RCVALL _WSAIOW(IOC_VENDOR, 1)using namespace std;typedef struct IP_HEAD{union{unsigned char Version; //Version(4)unsigned char HeadLen; //Header Length(4)};unsigned char ServiceType; //Type of Servics(8)unsigned short TotalLen; //Total Length(16)unsigned short Identification; //Identification(16)union{unsigned short Flags; //IP Flags(3)unsigned short FragOffset; //Fragment Offset(13)};unsigned char TimeToLive; //TTL(8)unsigned char Protocol; //Protocol(8)unsigned short HeadChecksum; //Header Checksum(16)unsigned int SourceAddr; //Source Address(32)unsigned int DestinAddr; //Destination Address(32)unsigned char Options; //IP Options} ip_head;void main(){WSADATA WSAData;if(WSAStartup(MAKEWORD(2,2), &WSAData) != 0){//初始化cout<<"Init fails!"<<endl;return;}/****************************数据包的捕获*********************************/ SOCKET sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP); //抓捕IP数据报bool flag = true;setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag)); //设置IP头操作选项char hostName[128];gethostname(hostName, 100);hostent* pHostIp = gethostbyname(hostName);sockaddr_in host_addr;host_addr.sin_family = AF_INET;host_addr.sin_port = htons(6000);host_addr.sin_addr = *(in_addr*)pHostIp->h_addr_list[0];bind(sock, (PSOCKADDR)&host_addr, sizeof(host_addr)); //把sockRaw绑定到本地网卡上DWORD dwBufferLen[10];DWORD dwBufferInLen = 1;DWORD dwBytesReturned = 0;WSAIoctl(sock, IO_RCVALL, &dwBufferInLen, sizeof(dwBufferInLen),&dwBufferLen, sizeof(dwBufferLen), &dwBytesReturned, NULL, NULL);//接受所有的数据char buffer[65535];ip_head ip;int packsum = 2;for(int i=0; i<packsum; i++){if(recv(sock, buffer, 65535, 0)>0){ip = *(ip_head*)buffer;cout<<"Version:"<<inet_ntoa(*(in_addr*)&ip.Version)<<endl;cout<<"HeadLen:"<<inet_ntoa(*(in_addr*)&ip.HeadLen)<<endl;cout<<"ServiceType: "<<inet_ntoa(*(in_addr*)&ip.ServiceType)<<endl;cout<<"TotalLen:"<<inet_ntoa(*(in_addr*)&ip.TotalLen)<<endl;cout<<"Identification: "<<inet_ntoa(*(in_addr*)&ip.Identification)<<endl;cout<<"Flags:"<<inet_ntoa(*(in_addr*)&ip.Flags)<<endl;cout<<"FragOffset: "<<inet_ntoa(*(in_addr*)&ip.FragOffset)<<endl;cout<<"TimeToLive: "<<inet_ntoa(*(in_addr*)&ip.TimeToLive)<<endl;cout<<"Protocol:"<<inet_ntoa(*(in_addr*)&ip.Protocol)<<endl;cout<<"HeadChecksum:"<<inet_ntoa(*(in_addr*)&ip.HeadChecksum)<<endl;cout<<"SourceAddr:"<<inet_ntoa(*(in_addr*)&ip.SourceAddr)<<endl;cout<<"DestinAddr:"<<inet_ntoa(*(in_addr*)&ip.DestinAddr)<<endl;cout<<"Options:"<<inet_ntoa(*(in_addr*)&ip.Options)<<endl<<endl;}}/*****************************数据包的解析********************************/ //string str = inet_ntoa(*(in_addr*)&ip.SourceAddr);string ver = inet_ntoa(*(in_addr*)&ip.Version);string str1= inet_ntoa(*(in_addr*)&ip.HeadLen);string str2= inet_ntoa(*(in_addr*)&ip.ServiceType);string str3 = inet_ntoa(*(in_addr*)&ip.TotalLen);string str4 = inet_ntoa(*(in_addr*)&ip.Identification);string str5 = inet_ntoa(*(in_addr*)&ip.Flags);string str6 = inet_ntoa(*(in_addr*)&ip.FragOffset);string str7 = inet_ntoa(*(in_addr*)&ip.TimeToLive);string str8 = inet_ntoa(*(in_addr*)&ip.Protocol);string str9 = inet_ntoa(*(in_addr*)&ip.HeadChecksum);string str10= inet_ntoa(*(in_addr*)&ip.SourceAddr);string str11 = inet_ntoa(*(in_addr*)&ip.DestinAddr);string str12 = inet_ntoa(*(in_addr*)&ip.Options);fstream outfile;outfile.open("d:\\aa.dat", ios::out|ios::binary|ios::trunc);//ios::in| outfile.write(ver.c_str(), ver.length()+3);outfile.write(str1.c_str(), str1.length()+3);outfile.write(str2.c_str(), str2.length()+3);outfile.write(str3.c_str(), str3.length()+3);outfile.write(str4.c_str(), str4.length()+3);outfile.write(str6.c_str(), str6.length()+3);outfile.write(str7.c_str(), str7.length()+3);outfile.write(str8.c_str(), str8.length()+3);outfile.write(str9.c_str(), str9.length()+3);outfile.write(str10.c_str(), str10.length()+3);outfile.write(str11.c_str(), str11.length()+3);outfile.write(str12.c_str(), str12.length()+3);outfile.close();system("pause");}。