解析IP数据报

合集下载

IP 数据报捕获与分析实验报告

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数据报格式一、什么是IP数据报?IP数据报是一种在网络中传输的数据单元,通常由一个或多个IP 数据包组成。

它包含了发送主机和接收主机之间的数据和相关控制信息。

二、IP数据报的格式是什么?IP数据报的格式通常包括以下几个部分:1. 版本:IP协议的版本号,目前常用的版本是4(IPv4)。

2. 头部校验和:用于检测数据报在传输过程中是否发生改变。

3. 目标协议地址:接收数据报的设备的IP地址。

4. 源协议地址:发送数据报的设备的IP地址。

5. 数据部分:实际要传输的数据。

三、IP数据报头部有哪些字段?IP数据报头部包含多个字段,以下是其中一些常见的字段:1. 服务类型/TOS:用于控制数据传输的优先级、可靠性与实时性。

2. 标识符:用于跟踪数据报在转发过程中的顺序。

3. 标志字段:用于控制数据报的分片和粘包行为。

4. 片偏移:用于指定数据报片段在原始数据中的位置。

5. TTL(生存时间):用于控制数据报在路由器中的缓存时间和转发次数。

6. 协议:指示使用哪种协议来处理数据报的数据部分。

7. 校验和:用于检测IP数据报在传输过程中是否发生改变。

8. 源主机地址和目标主机地址:与IP数据报头部中的源协议地址和目标协议地址相对应,用于指定发送和接收数据报的主机。

四、如何解析IP数据报?解析IP数据报需要使用特定的协议和工具。

常见的工具包括Wireshark、tcpdump等。

解析过程通常包括以下步骤:1. 读取数据报。

2. 提取头部信息,包括版本、标志、片偏移、TTL等。

3. 根据协议字段确定使用哪种协议来处理数据报的数据部分。

4. 根据头部中的目标主机地址将数据报转发到相应的网络设备或应用程序。

五、如何处理IP数据报的分片?当一个较大的数据包需要通过路由器进行转发时,如果目标主机地址不在同一个网络中,路由器可能会将数据包分成多个更小的片段,并将每个片段发送到不同的网络中。

IP数据报传输与处理过程

IP数据报传输与处理过程

IP数据报传输与处理过程图1-1显示了由3个路由器互联3个以太网的互联网示意图,表1-1~表1-7给出了主机的路由表。

A、B和路由器R1,R2,R3表1-1 主机A的路由表子网掩码目的网络下一路由器255.255.0.0 10.1.0.0 直接投递0.0.0.0 0.0.0.0 10.1.0.1表1-2 路由器R1的路由表子网掩码目的网络下一路由器255.255.0.0 10.1.0.0 直接投递255.255.0.0 10.3.0.0 直接投递255.255.0.0 10.2.0.0 10.1.0.1表1-3 路由器R2的路由表子网掩码目的网络下一路由器255.255.0.0 10.1.0.0 直接投递255.255.0.0 10.2.0.0 直接投递255.255.0.0 10.3.0.0 10.2.0.2表1-4 路由器R3的路由表子网掩码目的网络下一路由器255.255.0.0 10.2.0.0 直接投递255.255.0.0 10.3.0.0 直接投递255.255.0.0 10.1.0.0 10.2.0.1表1-5 主机B的路由表子网掩码目的网络下一路由器255.255.0.0 10.3.0.0 直接投递0.0.0.0 0.0.0.0 10.3.0.2假如主机A的某个应用程序需要发送数据到主机B的某个应用程序,IP数据报在互联网中的传输与处理大致要经历如下过程:1.主机发送IP数据报如果主机A要发送数据给互联网上的另一台主机B,那么,主机A首先要构造一个目的IP地址为主机B的IP数据报(目的IP地址=10.3.0.88),然后对数据报进行路由选择。

利用路由选择算法和主机A的路由表(见表1-1)可以得到,目的主机B和主机A不在同一网络,需要将该数据报转发到默认路由器R2(IP地址10.1.0.1)。

尽管主机A需要将数据报首先送到它的默认路由器R2而不是目的主机B,但是它既不会修改原IP数据报的内容,也不会在原IP数据报上面附加内容(甚至不附加下一默认路由器的IP地址)。

网络通信协议分析课程设计源代码和实验报告+帧封装、IP数据包解析和发送TCP数据包

网络通信协议分析课程设计源代码和实验报告+帧封装、IP数据包解析和发送TCP数据包

网络协议分析课程设计之协议编程实验一帧封装实验目的:•编写程序,根据给出的原始数据,组装一个IEEE 802.3格式的帧(题目)默认的输入文件为二进制原始数据(文件名分别为input1和input2))。

•要求程序为命令行程序。

比如,可执行文件名为framer.exe,则命令行形式如下:framer inputfile outputfile,其中,inputfile为原始数据文件,outputfile为输出结果。

•输出:对应input1和input2得结果分别为output1和output2。

试验要求:•编写程序,根据给出的原始数据,组装一个IEEE 802.3格式的帧(题目)默认的输入文件为二进制原始数据(文件名分别为input1和input2))。

•要求程序为命令行程序。

比如,可执行文件名为framer.exe,则命令行形式如下:framer inputfile outputfile,其中,inputfile为原始数据文件,outputfile为输出结果。

输出:对应input1和input2得结果分别为output1和output2验设计相关知识:帧:来源于串行线路上的通信。

其中,发送者在发送数据的前后各添加特殊的字符,使它们成为一个帧。

Ethernet从某种程度上可以被看作是机器之间的数据链路层连接。

按802.3标准的帧结构如下表所示(802.3标准的Ethernet帧结构由7部分组成)802.3标准的帧结构其中,帧数据字段的最小长度为46B 。

如果帧的LLC 数据少于46B ,则应将数据字段填充至46B 。

填充字符是任意的,不计入长度字段值中。

在校验字段中,使用的是CRC 校验。

校验的范围包括目的地址字段、源地址字段、长度字段、LLC 数据字段。

循环冗余编码(CRC)是一种重要的线性分组码、编码和解码方法,具有简单、检错和纠错能力强等特点,在通信领域广泛地用于实现差错控制。

CRC 校验码的检错能力很强,不仅能检查出离散错误,还能检查出突发错误。

IP数据报文分析

IP数据报文分析
计算机科学与技术学院实验报告(电子版)
课程:TCP/IP协议分析
实验名称
IP数据包格式
指导老师
姓名
学号
班级
实验地点
实验日期
成绩
一、实验内容:
抓取IP数据包进行分析
二、实验目的:
熟悉ip数据包的格式。
分析iP数据包
三、涉及实验的相关情况介绍(包含使用软件或实验设备等情况):
Windows系统抓包软件
四、程序清单与测试数据:
08 00:协议类型
45:4代表版本号IPV4,5代表首部长度。当前为标准IP头4*5=20
00:服务类型
00 3C :IP数据包总长度
04 5A:标识
00 00:标志+片偏移
80:生存时间
01:ICMP协议
8ห้องสมุดไป่ตู้ 25 :首部校验和
C0 A8 21 04:源IP地址
C0 A806ED:目的IP地址
2、IP数据包分片:
五、实验结果、分析、体会等:
简单的了解ip报文格式,对ip数据报有了更进一步的认识。
执行ping命令:
图4-1
抓取数据包:
图4-2
图4-3
图4-4
图4-5
图4-6
图4-3、图4-4、图4-5和图4-6为IP分片包,标识为7e ca,图4-3、图4-4与图4-5标志为001,DF位为0,代表分片。MF为1,代表后面有分片。图4-5标志为000,DF位为0,代表分片。MF为0,代表最后一个分片
一、IP数据包分析:
1、IP数据包格式:
图1-1
本机信息:
图2-1
IP:192.168.33.4MAC:8C-89-A5-3B-90-4B

实验二IP报文的捕获与分析

实验二IP报文的捕获与分析

实验⼆IP报⽂的捕获与分析实验⼆ IP报⽂的捕获与分析——实验报告⼀、实验⽬的(1)掌握IP协议报⽂格式。

(2)对捕捉到的包进⾏IP分析。

⼆、实验内容⽤Wireshark过滤出IP数据包,查看并分析具体的IP包的内容。

三、实验原理1、wireshark简介Wireshark(前称Ethereal)是⼀个⽹络封包分析软件。

⽹络封包分析软件的功能是撷取⽹络封包,并尽可能显⽰出最为详细的⽹络封包资料。

在GNUGPL通⽤许可证的保障范围底下,使⽤者可以以免费的代价取得软件与其程式码,并拥有针对其源代码修改及客制化的权利。

Ethereal是⽬前全世界最⼴泛的⽹络封包分析软件之⼀。

Wireshark可以帮助⽹络管理员检测⽹络问题,帮助⽹络安全⼯程师检查资讯安全相关问题,开发者使⽤Wireshark来为新的通讯协议除错,普通使⽤者使⽤Wireshark来学习⽹络协定的相关知识当然,有的⼈⽤它来寻找⼀些敏感信息Wireshark不是⼊侵侦测软件(Intrusion DetectionSoftware,IDS)。

对于⽹络上的异常流量⾏为,Wireshark不会产⽣警⽰或是任何提⽰。

然⽽,仔细分析Wireshark撷取的封包能够帮助使⽤者对于⽹络⾏为有更清楚的了解。

Wireshark不会对⽹络封包产⽣内容的修改,它只会反映出⽬前流通的封包信息,它也不会送出封包⾄⽹络上2、IP数据报格式IP数据报TCP/IP协议定义了⼀个在因特⽹上传输的包,称为IP数据报(IP Datagram)。

这是⼀个与硬件⽆关的虚拟包,由⾸部和数据两部分组成。

⾸部的前⼀部分是固定长度,共20字节,是所有IP数据报必须具有的。

在⾸部的固定部分的后⾯是⼀些可选字段,其长度是可变的。

⾸部中的源地址和⽬的地址都是IP协议地址。

IP数据包格式如图1所⽰。

图1 IP报⽂格式上⽹查找资料,整理如下更详细更易懂的IP报⽂格式与字段含义:IP协议偏移量0~34~78~1516~1819~31偏移量0~34~78~1516~1819~31 0版本⾸部长度服务类型总长度32标识符标识分段偏移64存活时间协议⾸部校验和96源IP地址128⽬的IP地址160选项160或192+数据IP报⽂字段含义版本指 IP 协议所使⽤的版本。

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

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

任务三网络编程一、实验目的捕获本机网卡的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数据报的转发过程如下:
1. 主机C向主机F发送IP数据报。

首先,主机C将自己的IP 地址和子网掩码相与,得到主机C所在网络的网络地址。

之后,主机C将主机F的IP地址与自己的子网掩码相与,得到目的网络地址。

2. 主机C发现主机F的IP地址和自己的IP地址不在同一网络,因此知道需要使用路由器进行转发。

3. 主机C通过查找路由表,找到下一跳路由器的IP地址。

4. 主机C将IP数据报发送给下一跳路由器。

5. 下一跳路由器收到IP数据报后,同样进行目的网络地址和子网掩码的运算,发现数据报的目的地仍然不是自己直接连接的网络,因此再次将IP数据报转发给下一个路由器。

6. 重复步骤4和5,直到数据报到达目的地网络。

7. 在目的地网络中,目的主机的IP地址和子网掩码运算结果与网络地址匹配,因此将数据报接收下来。

以上是IP数据报的转发过程,仅供参考,建议查阅计算机科学相关书籍或咨询专业人士获取更多信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

郑州轻工业学院网络协议分析课程设计题目:解析IP数据包姓名:院(系):计算机与通信工程学院专业班级:网络工程08-1学号:200807030140指导教师:成绩:时间:2011年6月12日至2011年6月17日郑州轻工业学院课程设计任务书题目解析IP数据包专业、班级网络工程08-1学号 200807030140姓名主要内容、基本要求、主要参考资料等:主要内容:捕获网络中的IP数据包,解析数据包的内容,显示结果,并将结果写入日志文件。

设置停止标志,当程序接收到停止命令时即停止。

基本要求:使用图形界面实现IP数据包的解析,画出基本流程图,写出解析的实现过程、操作演示截图与核心代码。

参考资料:《计算机网络(第5版)》谢希仁电子工业出版社《网络协议分析》寇晓蕤、罗军勇等机械工业出版社《TCP/IP协议族(第4版)》王海、张娟等译清华大学出版社《c#高级编程(第6版)》李铭译清华大学出版社《Visual C#.NET网络核心编程》周存杰清华大学出版社完成期限:指导教师签名:课程负责人签名:2011年 6 月 16 日目录一实验目的 (4)二实验内容 (4)三实验环境 (4)四实验步骤 (4)1.实验流程图 (4)2.实验核心代码 (5)3.演示截图 (6)五实验体会 (7)六参考文献 (7)七附录 (7)Socket.cs (7)CatchIP.cs (10)ShowIP.cs (11)一实验目的熟悉IP包结构,加深对IP层工作原理的理解和认识。

二实验内容(1)捕获网络中的IP数据包,解析数据包的内容,显示结果,并将结果写入日志文件。

(2)显示的内容包括:捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。

(3)设置停止标志,当程序接收到停止命令时即停止。

三实验环境本实验所使用的编程语言为c#程序语言实验开发环境为Microsoft Visual Studio 2008四实验步骤1.实验流程图2.实验核心代码1)公共类中的核心代码2)捕获IP信息窗口核心代码3)显示窗口核心代码3.演示截图五实验体会哈哈….这东西自己写啦哈哈哈……六参考文献《计算机网络(第5版)》谢希仁电子工业出版社《网络协议分析》寇晓蕤、罗军勇等机械工业出版社《TCP/IP协议族(第4版)》王海、张娟等译清华大学出版社《c#高级编程(第6版)》李铭译清华大学出版社《Visual C#.NET网络核心编程》周存杰清华大学出版社七附录Socket.csnamespace GetIp{[StructLayout(LayoutKind.Explicit)]public struct IPHeader{[FieldOffset(0)] public byte ip_verlen; //首部长度+版本号[FieldOffset(1)] public byte ip_tos; //服务类型[FieldOffset(2)] public ushort ip_totallength; //数据包总长度)[FieldOffset(4)] public ushort ip_id; //16位标识[FieldOffset(6)] public ushort ip_offset; //3位标志位[FieldOffset(8)] public byte ip_ttl; //8位生存时间TTL[FieldOffset(9)] public byte ip_protocol; //8位协议(TCP, UDP, ICMP, Etc.)[FieldOffset(10)] public ushort ip_checksum; //16位IP首部校验和[FieldOffset(12)] public uint ip_srcaddr; //32位源IP地址[FieldOffset(16)] public uint ip_destaddr; //32位目的IP地址}public class Sock{private bool keepRunning;private static int rcv_buf_len;private byte[] rcv_buf_bytes;private Socket socket = null;//声明套接字public Sock(){ rcv_buf_len=4096;rcv_buf_bytes=new byte [rcv_buf_len];}public bool KeepRunning{ get{return keepRunning;}set{keepRunning=value;}}public void CreateAndBindSocket(string IP) //建立并绑定套接字{socket=new Socket (AddressFamily.InterNetwork ,SocketType.Raw ,ProtocolType.IP );socket.Bind(new IPEndPoint(IPAddress.Parse(IP), 0));SetSocketOption();}private void SetSocketOption() //Socket设置{ SniffSocketException ex;try{socket.SetSocketOption (SocketOptionLevel.IP ,SocketOptionName.HeaderIncluded ,1);byte[] IN=new byte [4]{1,0,0,0};byte[] OUT = new byte[4]; //低级别操作模式,接受所有的数据包int SIO_RCV ALL = unchecked((int)0x98000001);int ret_code=socket.IOControl (SIO_RCV ALL,IN,OUT);ret_code = OUT[0] + OUT[1] + OUT[2] + OUT[3];if(ret_code!=0){ ex=new SniffSocketException ("命令实行错误!!");throw ex;}}catch(SocketException e){ ex=new SniffSocketException ("创建套接字错误!!",e);throw ex;}}public void ShutDown() //关闭接收{ if(socket!=null){ socket.Shutdown(SocketShutdown.Both); }}public void Run(){ IAsyncResult ar = socket.BeginReceive(rcv_buf_bytes, 0, rcv_buf_len, SocketFlags.None, new AsyncCallback(CallReceive), this); }private void CallReceive(IAsyncResult ar) //连续接受数据{ int received_bytes;received_bytes = socket.EndReceive(ar);Receive(rcv_buf_bytes, received_bytes);if (keepRunning) Run();}unsafe private void Receive(byte [] buf, int len) //接受IP数据包信息方法{ byte temp_ip_tos = 0;byte temp_protocol=0; //提取协议类型uint temp_version=0; //提取IP协议版本uint temp_ip_srcaddr=0;uint temp_ip_destaddr=0;short temp_srcport=0;short temp_dstport=0;IPAddress temp_ip;PacketArrivedEventArgs e=new PacketArrivedEventArgs();fixed(byte *fixed_buf = buf){ IPHeader * head = (IPHeader *) fixed_buf;temp_protocol = head->ip_protocol;switch (temp_protocol) //提取协议类型{ case 1: e.Protocol = "ICMP "; break;case 2: e.Protocol = "IGMP "; break;case 6: e.Protocol = "TCP "; break;case 17: e.Protocol = "UDP "; break;default: e.Protocol = "UNKNOWN "; break;}e.HeaderLength=(uint)(head->ip_verlen & 0x0F) << 2;e.TTL = (uint)head->ip_ttl;e.IPTos = ((uint)head->ip_tos).ToString();e.Packet_id = ((ushort)head->ip_id).ToString();e.Packet_set = ((ushort)((head->ip_offset) >> 13)).ToString();e.Ip_check=((ushort)head->ip_checksum&(0X1FFF)).ToString();temp_version = (uint)(head->ip_verlen & 0xF0) >> 4;e.IPVersion = temp_version.ToString();temp_ip_tos = head->ip_tos;temp_ip_srcaddr = head->ip_srcaddr;temp_ip = new IPAddress(temp_ip_srcaddr);e.OriginationAddress =temp_ip.ToString();temp_ip_destaddr = head->ip_destaddr;temp_ip = new IPAddress(temp_ip_destaddr);e.DestinationAddress = temp_ip.ToString();temp_srcport = *(short *)&fixed_buf[e.HeaderLength];e.OriginationPort=((ushort)workToHostOrder(temp_srcport)).ToString();temp_dstport = *(short*)&fixed_buf[e.HeaderLength + 2];e.DestinationPort=((ushort)workToHostOrder(temp_dstport)).ToString();e.PacketLength =(uint)len;e.MessageLength =(uint)len - e.HeaderLength;e.ReceiveBuffer=buf;Array.Copy(buf,0,e.IPHeaderBuffer,0,(int)e.HeaderLength);Array.Copy(buf,(int)e.HeaderLength,e.MessageBuffer,0,(int)e.MessageLength);}OnPacketArrival(e);}public class PacketArrivedEventArgs : EventArgs{ private string ip_tos;private string protocol;private string destination_port;private string origination_port;private string destination_address;private string origination_address;private string ip_version; //IP版本号private uint total_packet_length;//IP总长度private uint message_length;private uint header_length;private string packet_ip_id;private string packet_ip_set;private string ip_check_he;private uint ipttl;private byte []receive_buf_bytes = null;private byte []ip_header_bytes = null;private byte []message_bytes = null;public string Ip_check //校验和{ get { return ip_check_he; }set { ip_check_he = value; }}下定义同,略…public override string ToString() //重载输出格式{return " " + protocol + " " + origination_address + " " + destination_address;}}public delegate void PacketArrivedEventHandler(Object sender, PacketArrivedEventArgs args);public event PacketArrivedEventHandler PacketArrival; //声明时间句柄函数protected virtual void OnPacketArrival(PacketArrivedEventArgs e){ if (PacketArrival != null){PacketArrival(this, e);}}}}CatchIP.csnamespace GetIp{public class MyWindow : System.Windows.Forms.Form{ public MyWindow() //初始化{InitializeComponent();}private void InitializeComponent() //自定义初始化函数{ 略……}private void MyWindow_Load(object sender, System.EventArgs e) //加载{ManagementObjectSearcher query1 = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration");ManagementObjectCollection queryCollection1 = query1.Get();string[] IPString = new string[10];int x = 0;string[] temp;foreach (ManagementObject mo in queryCollection1){ temp = mo["IPAddress"] as string[];if (temp != null){ foreach (string st in temp) //捕获所有的IP{ IPString[x] = st;if (st != "") { addressComboBox.Items.Add(st); }x++;}}}addressComboBox.Text = addressComboBox.Items[0] as string;mySniffSocket = new Sock();try{ mySniffSocket.CreateAndBindSocket(addressComboBox.Text.Trim());}catch (Sock.SniffSocketException ex){ MessageBox.Show(this, ex.Message);}mySniffSocket.PacketArrival+=newSock.PacketArrivedEventHandler(DataArrival ); }private void DataArrival(Object sender, Sock.PacketArrivedEventArgs e){ try{ resultListBox.Items.Add(e); }catch (Exception e1) { MessageBox.Show(e1.ToString()); }}protected override void Dispose(bool disposing)if( disposing ){if (components != null){ components.Dispose();}}base.Dispose( disposing );}private void startButton_Click(object sender, System.EventArgs e) //开始捕获{ if(mySniffSocket.KeepRunning==false){ mySniffSocket.KeepRunning =true;try{ mySniffSocket.Run ();}catch(SocketException){mySniffSocket.CreateAndBindSocket (addressComboBox.Text );mySniffSocket.Run ();}startButton.Text ="暂停";}else{ mySniffSocket.KeepRunning =false;startButton.Text ="继续";}}private void stopButton_Click(object sender, System.EventArgs e) //停止捕获{ mySniffSocket.KeepRunning =false;startButton.Text ="开始";Thread.Sleep (10);mySniffSocket.ShutDown ();}private void clearButton_Click(object sender, System.EventArgs e) //清除列表{resultListBox.Items.Clear(); }private void resultListBox_DoubleClick(object sender, System.EventArgs e) {ShowIpdlg=newShowIp(resultListBox.SelectedItemasSock.PacketArrivedEventArgs);dlg.Show();}private void button1_Click(object sender, EventArgs e) //退出{if (MessageBox.Show("你确定要退出本程序吗?", "提醒", MessageBoxButtons.OKCancel, rmation, MessageBoxDefaultButton.Button1) == DialogResult.OK)Application.Exit();}}}ShowIP.csnamespace GetIp{ public class ShowIp : System.Windows.Forms.Form{ public ShowIp(){InitializeComponent();}private void InitializeComponent() //自定义初始化{略… }private string BytesToString(byte[] bTemp)//将字节数组转化成字符串{ int bLen = bTemp.Length;string rtnString = "";for (int i = 0; i < bLen; i++)rtnString += bTemp[i].ToString();return rtnString;}public ShowIp(Sock.PacketArrivedEventArgs e):this(){ src_addLabel.Text =e.OriginationAddress ; //源地址dest_addLabel.Text =e.DestinationAddress ; //目的地址src_portLabel.Text =e.OriginationPort; //源端口dest_portLabel.Text =e.DestinationPort; //目的端口protocolLabel.Text =e.Protocol; //协议类型label8.Text = e.HeaderLength.ToString()+" byte"; //IP包头长度label9.Text = e.PacketLength.ToString()+" byte"; //IP总长度label12.Text = e.MessageLength.ToString()+" byte"; //IP数据包长度label13.Text =e.TTL.ToString()+" hops"; //生存时间label15.Text = e.IPVersion; //IP版本号label17.Text = e.IPTos.ToString(); //服务类型label19.Text = e.Packet_id; //IP标识label21.Text = e.Packet_set; //IP标志label23.Text = e.Ip_check; //首部校验和}protected override void Dispose(bool disposing){ if (disposing){if (components != null){components.Dispose();}}base.Dispose(disposing);}private string getstring() //信息合并,以便输出到文件{ string str_contant;str_contant="IP版本号: "+label15.Text.ToString()+Environment.NewLine;str_contant += "总长度: " + label9.Text.ToString() + Environment.NewLine;下同,略…return str_contant;}private void IO_out() //输出信息到日志文件{ string path = @"D:\log_ip.log";string text=getstring();try{ FileStream fs_W = new FileStream(path, FileMode.Create);StreamWriter sw = new StreamWriter(fs_W);sw.Write(text);sw.Close();MessageBox.Show("写入日志完毕!\n");}catch(IOException ex){ MessageBox.Show (ex.ToString ()+"\n\n"+ex.Message,"写入日志错误!");}}}说明:由于代码过长,本报告只贴出了代码中关键的部分,而对于如控件的初始化等代码全部省略说明1、课程设计进行期间,学生应按教学计划,将每天的学习情况(包括学习内容、遇到问题及解决办法、心得体会等)如实进行记录。

相关文档
最新文档