解析IP数据包

合集下载

IP包格式详解

IP包格式详解
简介:ICMP(Internet Control Message Protocol)是用于在IP主机和路由器 之间传递控制消息的协议,用于诊断网络问题。
工作原理:当IP包在传输过程中遇到问题时,如目的不可达、路由问题等,源主机发 送ICMP报文给路由器或目的主机,帮助诊断和解决问题。
主要功能:ICMP提供了一些重要的诊断工具,如ping命令,用于测试主机之间的连 通性。
IP包安全防护措施
使用加密技术 保护IP包内容, 防止数据被窃
取或篡改
部署防火墙, 限制非法访问
和恶意攻击
定期更新和升 级操作系统、 应用程序和安 全设备,以修
复安全漏洞
实施安全审计 和日志记录, 监控网络流量
和异常行为
加密技术应用
加密技术可以保护IP包的内容,防止数据被窃取或篡改 常见的加密技术包括对称加密和公钥加密 对称加密使用相同的密钥进行加密和解密,常见的对称加密算法有AES和DES 公钥加密使用不同的密钥进行加密和解密,常见的公钥加密算法有RSA和ECC
严格源路由:用于 指定数据包必须经 过特定的路径到达 目的主机
选项长度
长度范围:0-40字节 选项字段的长度不固定,取决于具体选项的长度和数量 选项字段长度必须为4字节的整数倍 选项字段长度不足时,需要填充0字节
选项内容
选项类型:标识IP选项的类型, 如路由器警告、时间戳等
选项长度:IP选项的长度,以 32位为单位
IP包重组的过程
IP包到达接收端
接收端检查IP包的头部信 息
根据头部信息,将IP包放 入重组缓冲区
按照IP包的序号进行排序, 完成重组
IP包安全问题与 防护措施
IP包面临的安全威胁
篡改数据:攻击者可以修改IP包中的数据,导致数据丢失或损坏 窃取信息:攻击者可以截获IP包中的敏感信息,如账号密码等 拒绝服务:攻击者可以发送大量的垃圾IP包,导致网络拥堵,影响正常通信 恶意软件传播:攻击者可以利用IP包传播病毒、木马等恶意软件

ip数据包的捕获与解析代码

ip数据包的捕获与解析代码

ip数据包的捕获与解析代码//packcapturedlg.h:headerfile#defineipv4_wersion4#defineipv6_wersion6#defineic mp_packet1#defineigmp_packet2#definetcp_packet6#defineegp_packet8#defineudp_pa cket17#defineospf_packet89classcpackcapturedlg:publiccdialog{public://{{afx_data(cfindhostdlg)enum{ido=ido_packcapture_dialog};intm_count;cstringm_packet;//}}afx_dataprotected://{{afx_msg(cfindhostdlg)afx_msgvoidoncapture();//}}afx_msgprivate:typedefstructip_head//ip头部结构{union{unsignedcharversion;//版本(字节前四位)unsignedcharheadlen;//头部长度(字节后四位)};unsignedcharservicetype;//服务类型unsignedshorttotallen;//总长度unsignedshortidentifier;//标识符union{unsignedshortflags;//标志位(字前三位)unsignedshortfragoffset;//片偏移(字后13位)};unsignedchartimetolive;//存活周期unsignedcharprotocol;//协议unsignedshortheadchecksum;//头部校验和unsignedintsourceaddr;//源ip地址unsignedintdestinaddr;//目的ip地址}ip_head;typedefstructicmp_head//icmp头部结构{unsignedchartype;//类型unsignedcharcode;//代码unsignedshortheadchecksum;//头部校验和unsignedshortidentifior;//标识符unsignedshortsequence;//序号}icmp_head;};//packcapturedlg.cpp:implementationfile#include\#include\#include\#include\#include\#defineio_rcvall_wsaiow(ioc_vendor,1)voidcpackcapturedlg::oncapture(){wsadataw sadata;//创建与socket库存取if(wsastartup(makeword(2,2),&wsadata)!=0){messagebox(\初始化失利!\return;}socketsocket;//创建原始socketsocket=socket(af_inet,sock_raw,ipproto_ip);if(socket==invalid_socket){me ssagebox(\创建socket失败!\wsacleanup();return;}intrecvtime=5000;//设置socket 操作选项if(setsockopt(socket,sol_socket,so_rcvtimeo,(char*)&recvtime,sizeof(recvtime)) ==socket_error){messagebox(\设置socket选项失败!\closesocket(socket);wsacleanup();return;}charhostname[128];//获得本地主机名称if(gethostname(hostname,128)==socket_error){messagebox(\获得主机名失败!\closesocket(socket);wsacleanup();return;}hostent*phostent;//获得本地主机ip地址phostent=gethostbyname(hostnmae);if(phostent==null){messagebox(\获得主机地址失败!\closesocket(socket);wsacleanup();return;}sockaddr_inhostaddr;//定义socket地址结构memset(&hostaddr,0,sizeof(hostaddr));hostaddr.sin_family=af_inet;hostaddr.sin_ addr.s_addr=(*(in_addr*)phostent->h_addr).s_addr;intnbind;//绑定socket与网卡nbind=bind(socket,(psockaddr)&hostaddr,sizeof(hostaddr));if(nbind==socket_erro r){messagebox(\绑定socket失败!\closesocket(socket);wsacleanup();return;}dworddwvalue=1;//设置socket拒绝接受模式if(ioctlsocket(socket,io_rcvall,&dwvalue)==socket_error){messagebox(\设置socket接收器失利!\closesocket(socket);wsacleanup();return;}updatedata(true);m_packet=\版本总长度标志位片偏转协议源地址目的地址\\r\\n\for(inti=0;i>4)==ipv4_version)str.format(\if((iphead.version>>4)==ipv6_ version)str.format(\m_packet+=str;str.format(\m_packet+=str;str.format(\m=%u\m_packet+=str;str.format(\m_packet+=str;switch(iphead.protocol){caseicmp_packet:str.format(\break;caseigmp_packet:str.format(\break;casetcp_pa cket:str.format(\break;caseegp_packet:str.format(\break;caseudp_packet:str.for mat(\break;caseospf_packet:str.format(\break;};m_packet+=str;str.format(\m_pac ket+=str;str.format(\m_packet+=str;m_packet+=\}}updatedata(false);closesocket(socket);wsacleanup();//中止与socket库存取}。

ip数据报解析源地址目的地址

ip数据报解析源地址目的地址

青岛农业大学理学与信息科学学院计算机网络综合实习报告题目IP数据报解析源地址/目的地址专业计算机科学与技术学号姓名指导教师日期2014年11月8日目录一、设计任务和目的............................................................................................................................. - 2 -二、设计要求......................................................................................................................................... - 2 -三、设计内容......................................................................................................................................... - 3 -3.1原理概述: ......................................................................................................................................... - 3 -3.1.1 点分十进制表示法:......................................................................................................... - 3 -3.1.2 IP数据报格式: .............................................................................................................. - 3 -3.2 运行结果及分析............................................................................................................................. - 5 -3.2.1程序运行及截图.................................................................................................................. - 5 -3.2.2 分析...................................................................................................................................... - 6 -四、设计方案改进及建议.................................................................................................................... - 7 -五、总结体会......................................................................................................................................... - 7 -六、主要参考文献................................................................................................................................. - 8 -七、附录 ................................................................................................................................................. - 8 -附录1 程序流程图 ............................................................................................................................... - 8 - 附录2 程序源代码及解释................................................................................................................... - 9 -一、设计任务和目的设计一个解析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数据包的传输全过程详解

IP数据包的传输全过程详解主机A与主机B通信,A Ping B,图:A-交换机-B,AB同一子网(1)ping数据包用的是ICMP协议,IP协议的一个子协议,位于三层,包含A的IP,B的IP,三层进行IP封装成包,进入二层(2)A,B处于相同子网,查看缓存中对与目的对应得B第2层mac地址,如果存在,直接进行第2层封装成帧,经物理层信号编码,以010*******这样的bits流传输在网络介质上。

(3)如果不存在B的MAC,则发送ARP广播请求B的MAC,ARP数据包经物理层进入交换机端口,需要进行源端口号学习,目的端口查找,B响应ARP请求,交换机又可以学习一目的MAC地址与哪个端口对应,在下次传送数据时就不再需要对所有端口进行广播了。

B通过ARP单播把B的MAC响应给A,此时再返回(2)的处理过程。

(4)当再进行A与B之间数据包转发,将直接用B的MAC地址封装,数据转发得以高速交换主机A与主机C通信,A Ping C,图:A-交换机-路由器M-路由器N-交换机-C,AC不同子网(1)两个机器不在同一子网内,A要与目的C通信,A要向“缺省网关”发出ARP 包,而“缺省网关”的IP地址已经在A系统软件中设置。

这个IP地址实际上对应路由器M的E0的IP地址。

所以A对“缺省网关”的IP地址广播出一个ARP请求时,路由器M的E0口的MAC回复给A,此时A数据包的目的MAC替换为M的E0口MAC。

(2)MAC替换后,经物理层,传输到交换机物理层,再传到交换机数据链路层,再经数据数据链路层到物理层。

(3)经bit流传到路由器M的物理层,然后传到数据链路层,二层解封装,目的IP与路由器M三层IP路由表比较,若匹配正确,交给上层处理,否则会缓存数据包内容,然后根据目标地址查找路由表找到相关表项,得到NEXT HOP及出接口的MAC地址,用这两个地址作为新的目的及源MAC地址封装事先缓存的数据包,然后转发,这个过程称为帧的重写(REWRITE)。

TCPIP数据包解析示例

TCPIP数据包解析示例

IP协议(Internet Protocol)是网络层协议,用在因特网上,TCP,UDP,ICMP,IGMP数据都是按照IP数据格式发送得。

IP协议提供的是不可靠无连接得服务。

IP数据包由一个头部和一个正文部分构成。

正文主要是传输的数据,IP头部由20字节的固定长度和一个可选任意长度部分构成,以大段点机次序传送,从左到右,IP协议数据包格式如下TCP协议(TRANSMISSION CONTROL PROTOCOL)是传输层协议,为应用层提供服务,和UDP 不同的是,TCP协议提供的可靠的面向连接的服务,跟IP头部差不多,基本的长度也是20字节。

TCP 数据包是包含在一个IP数据报文中的,TCP数据包如下这是一次FTP的连接,呵呵,是cuteftp默认的cuteftp的FTP站点,IP地址是:216.3.226.21。

我的IP地址假设为:192.168.1.1。

下面的数据就是TCP/IP连接过程中的数据传输。

我们可以分析TCP/IP协议数据格式以及TCP/IP连接的三次握手情况。

下面的这些十六进制数据只是TCP/IP 协议的数据,不是完整的网络通讯数据。

第一次,我向FTP站点发送连接请求(TCP数据的可选部分去掉了)192.168.1.1->216.3.226.21IP头部:450000305252400080062c23c0a80101d803e215TCP头部:0d280015505f a9060000000070024000c0290000第一字节,"45",其中"4"是IP协议的版本(Version),说明是IP4。

"5"是IHL位,表示IP 头部的长度,是一个4bit字段,最大就是1111了,值为15,IP头部的最大长度就是60字节。

而这里为"5",说明是20字节,这是标准的IP头部长度,头部报文中没有发送可选部分数据。

解析ip数据包

目录一、课程设计的目的 (1)二、课程设计要求 (1)三、需求分析 (1)1.先对网卡进行编程,以便连接IP层的数据包。

(1)2.预先创建一个logfile文件来保存所解析的IP数据包。

(1)3.使用recv函数实现接收数据包的功能。

(1)四、设计分析 (1)4.1 网卡设置 (1)4.2 使用套接字 (2)五、程序测试 (3)六、小结 (5)七、附录 (5)一、课程设计的目的本章课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。

二、课程设计要求本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。

程序的具体要求如下:1)以命令行形式运行:ipparse logfile,其中ipparse是程序名, 而logfile 则代表记录结果的日志文件。

2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。

3)当程序接收到键盘输入Ctrl+C时退出。

三、需求分析1.先对网卡进行编程(使用套接字进行编程),以便连接IP层的数据包。

2.预先创建一个logfile文件来保存所解析的IP数据包。

3.使用recv函数实现接收数据包的功能。

4.编写ipparse函数解析捕获的数据包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。

四、设计分析4.1 网卡设置为了获取网络中的IP数据包,必须对网卡进行编程,在这里使用套接字(socket)进行编程。

但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式发出的数据包。

对于其他形式的数据包,如已到达网络接口,但却不是发送到此地址的数据包,应用程序无法收取与自己无关的数据包。

ip数据包分析

1. 开发背景计算机网络是计算机技术与通信技术紧密结合的产物,网络技术队信息产业的发展产生深远的影响,而且将发挥越来越大的作用。

本章在介绍网络形成于发展历史的基础上,对网络定义、分类与拓扑构型等问题进行了系统的讨论,并对网络的应用、网络技术的研究与发展进行了探讨,以帮助人们对网络技术与应用有一个全面和准确的认识。

IP数据包作为网络层的数据必然要通过帧来传输。

一个数据包可能要通过多个不同的网络。

每一个路由器都要讲接收到的帧进行拆包和处理,然后封装成另外一个帧。

帧的格式与长度取决于网络所采用的协议。

从网络层—数据链路层来看,由于IP数据包的最大长度为65535B,那么它所使用的网络的数据链路层最大传输单元的长度为65535B,那么传输的效率一定会很高。

但是实际上大量使用的网络的最大传输单元长度都比IP数据包的最大长度短。

以太网的MTU长度为1500B,它远小于IP数据包的最大长度。

因此,使用这些网络传输IP数据包时,要对IP数据包进行分成若干较小的片濑传输,这些片的长度小于或等于数据链路层MTU的长度。

2. 需求分析在传输路径中,路由器通常连接多个网络。

不同的网络的数据链路层最大传输单元的长度的可能不同的,因此路由器在接收到数据包,并准备要转发到目的主机时,它必须首先决定使用哪一个接口网络,要决定该网络的数据链路层最大传输单元是否允许该数据包通过。

根据数据包长度来确定是否需要对数据包进行分片。

如果数据包来自一个能够通过较大数据包的局域网,又要通过另一个只能通过较小的数据包的局域网,那么就必须对IP数据包进行分片。

IP数据包分片的方法如下图所示在IP数据包分片时,首先要确定片长度。

然后将原始IP数据包包括报头分成第1个片。

如果剩下的数据仍然超过长度,那么需要进行第2次分片。

第2个分片数据加上原来的报头,构成第2个片。

这样一直分割到剩下的数据小于片长度为止。

3. 可行性分析经济可行性适用本计算机安全系统可提高计算机通信流量分析和管理水平,把大量繁琐工作简单化,能够有效地节省人力物力,并能够准确地进行统计和计算,避免人工统计或计算所带来的差错,保证计算机通信管理高效而有序地进行。

TCPIP以太网数据包格式解析及LWIP架构图解

以太网数据包分类及格式解析1、以太网数据链路层帧格式(MAC 帧)——即CPU 通过MII/RMII 接口发给PHY 芯片的数据2、ARP (Address Resolution Protocol ——地址解析协议)协议数据包格式硬件类型:一般为0x0001:表示MAC 帧中“目的地址”的类型为以太网MAC地址。

协议类型:表示要映射的协议地址类型。

0x0800表示映射为IP 地址。

硬件地址长度:表示“目的地址”的长度,MAC 地址为0x06。

协议地址长度:表示IP 地址长度,为0x04。

OP :表示操作类型。

ARP 请求:0x01;ARP 应答:0x02;RARP 请求:0x03;RARP应答:0x04。

发送端以太网地址:同“源地址”。

发送端IP 地址:即“源地址”对应的IP 地址。

目的以太网地址:同“目的地址”,对ARP 请求来说,为0。

目的IP 地址:ARP 包要发往的对象IP 地址。

3、IP 数据包格式4位版本:对于IPv4,该值为4;对于IPv6,该值为6。

4位首部长度:记录首部长度,以字为单位。

对于不含选项的IP报头,该值为5。

8位服务类型:用来描述IP数据包急需的服务类型,如最小延时、最大吞吐量等。

本字段在LWIP中没用。

16位总长度:描述了整个IP数据报包括IP报头的总字节数。

16位标识:用来标识IP层发送出去的每一份IP数据报,每发送一份报文,该值加1。

3位标志和13位偏移:用于IP数据包分片时使用。

8位生存时间(TTL):描述了该IP数据包最多能被转发的次数,每经过一次转发,该值减1,当该值为0时,一个ICMP报文会被返回至源主机。

8位协议:用来描述该IP数据包是来自于上层的哪个协议。

1:ICMP;2:IGMP;6:TCP;17:UDP。

16位首部校验和:针对IP首部的校验和,并不包括数据部分。

数据部分的校验是由上层协议负责的。

32位源IP地址:发送该IP包的主机IP地址。

解析IP数据包

解析IP数据包IP数据包是在互联网传输中扮演重要角色的一种数据格式。

它包含了源IP地址和目标IP地址,以及其他与网络通信相关的信息。

解析IP数据包是对这些信息进行分析和解读的过程,以便理解数据包的来源、目的和内容。

在解析IP数据包时,我们可以从以下几个方面进行详细的分析:1. 版本号:IP数据包的版本号指示了所使用的IP协议的版本。

常见的版本有IPv4和IPv6。

IPv4是目前广泛使用的版本,而IPv6是为了解决IPv4地址不足的问题而推出的新版本。

2. 头部长度:IP数据包的头部长度指示了IP头部的长度,以字节为单位。

头部长度可以通过该字段的值乘以4来计算得到实际长度。

3. 服务类型:IP数据包的服务类型字段用于指示对数据包的处理优先级和要求。

这个字段可以用于区分不同类型的流量,如语音、视频或者普通数据。

4. 总长度:IP数据包的总长度字段指示了整个IP数据包的长度,包括头部和数据部份。

这个字段的值以字节为单位。

5. 标识、标志和片偏移:IP数据包的标识字段用于惟一标识一个IP数据包。

标志字段用于指示是否还有后续的分片数据包,以及是否允许分片。

片偏移字段用于指示当前数据包在原始数据中的位置。

6. 生存时间:生存时间字段指示了IP数据包在网络中的最大生存时间。

每经过一个路由器,生存时间字段的值就会减少1。

当生存时间字段的值为0时,数据包将被丢弃。

7. 协议:协议字段指示了IP数据包中封装的上层协议类型。

常见的协议有TCP、UDP和ICMP等。

8. 校验和:校验和字段用于检测IP数据包在传输过程中是否发生了错误。

发送端会计算校验和,并将其添加到IP头部中。

接收端在接收到数据包后会重新计算校验和,并将其与接收到的校验和进行比较,以检测数据包是否有损坏。

9. 源IP地址和目标IP地址:源IP地址字段指示了数据包的发送者的IP地址,而目标IP地址字段指示了数据包的接收者的IP地址。

通过解析IP数据包,我们可以获得有关网络通信的重要信息,如数据包的源地址、目标地址、协议类型等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序可以将当前列表的所有数据保存在日志文件里,默认路径为程 序运行目录,以导出时间命名。代码如下: private void toolStripButton2_Click(object sender, EventArgs e) {
string logName = DateTime.Now.ToString("yyyyMMddhhmmss") + ".log";
解析出各个字段信息,显示在窗口中。
基本要求: 选定本机IP后,程序捕获经过对应网卡的IP
数据报,根据IP数据报的结构,拆分获得各字段 的值,显示在窗口上。同时程序可以将捕获的所 有数据信息导出到日志文件。 参考资料: 《网络协议分析》 寇晓蕤 罗军勇 蔡延荣 机械 工业出版社
完 成 期 限:2011.6.13-2010.6.17 指导教师签名: 课程负责人签名:
通过这次课程设计,我收获了很多。首先把所学知识加以利用和 巩固,其次在实践中遇到问题去探索和学习,更增加了新知识。
在程序设计编写过程中,使用异步来处理数据包的接受和处理, 异步线程要添加数据项到主线程创建的界面,这就需要处理两个线程间 的数据交换。使用托管函数调用主线程的控件,添加数据项,实践证明 达到了预期的目的,积累了经验。
sender,
RawSocket.PacketArrivedEventArgs args)
{ TreeNode rootNode = new TreeNode(); TreeNode ipNode = MakeIPTreeNode(args); rootNode.Nodes.Add(ipNode); rootNode.Text = args.OriginationAddress + " -> " +
图2-1 程序结构图
1.1. 程序流程
根据分析后的程序结构图设计出相应的流程图。内容主要包括初始 化,获得主机IP列表,绑定Socket,开始捕获数据,分析数据,显示数 据项,导出日志文件,根据用户操作退出程序。
图2-2 流程图
第3章 程序实现
2. 类设计声明
根据程序的结构,将程序需要实现的功能细化为相应的类属性和 成员函数。程序有两个类,一个RawSocket类,用于数据包相关捕获和 处理。一个EventArgs类,用于类间传递信息。同时还有一个公共结构 体,对应IP数据包的格式。
这次的课程设计使我掌握了一定的网络编程知识,同时也掌握了 探索问题解决问题的方法。更好的理解课本的知识,为以后的进一步学 习和考试打下良好的基础。
附录:
程序主要代码
//解析接收的数据包,形成PacketArrivedEventArgs时间数据类对象,并 引发PacketArrival事件
unsafe private void Receive(byte[] buf, int len) {
{
treeView2.Nodes.Clear(); TreeNode root = (TreeNode)curr.Nodes[0].Clone(); treeView2.Nodes.Add(root); treeView2.ExpandAll(); } } 结果如图3-4所示。
图3-4
2.4.5. 导出日志
2010年 6月 11 日
第一章 引言 1.1. 关于题目 1.1.1. 题目要求 1.1.2. 选题背景 1.2. 关于编译软件 1.3. 关于稳定性
第二章 程序设计 2. 主要功能设计 2.1. 程序流程
第三章 程序实现 3. 类设计声明
目录
3.1. RawSocket类 3.2. EventArgs类 3.3. Header结构 3.4. 主要功能的实现 3.4.1. 程序界面 3.4.2. 获得主机IP 3.4.3. 显示列表 3.4.4. 详细信息 3.4.5. 导出日志 第四章 程序测试 4. 程序测试 总结与体会 附录:
string hostName = Dns.GetHostName(); IPHostEntry ipEntry = Dns.GetHostEntry(hostName); IPAddress[] addr = ipEntry.AddressList; foreach (IPAddress ip in addr) {
2.3. Header结构
public struct IPHeader {
public byte ip_verlen;
public byte ip_tos; public ushort ip_totallength; public ushort ip_id; public ushort ip_offset; public byte ip_ttl; public byte ip_protocol; public ushort ip_checksum; public uint ip_srcaddr; public uint ip_destaddr; }
.3. 关于稳定性
经测试,本程序可以在windows操作系统中稳定运行,较为稳定。要 求至少安装.Net Framework 2.0。
第2章 程序设计
1. 主要功能设计
根据分析,这个程序要实现如下几个功能,初始化、捕获数据包、 显示、导出日志。其中捕获数据包是程序的核心部分,是后续操作 的基础。程序结构如图2-1所示。
图3-6
第4章 程序测试
3. 程序测试
经过调试和修改,程序完全实现设计要求,成功抓取了IP数据 包,并分析显示了数据包各字段的信息,达到了这次实训的要求和目 的。
程序正常运行,能够捕获IP数据包,显示数据列表和数据项的详 细信息,并且成功导出到日志文件。
程序欢迎界面如图4-1所示。
图4-1
总结与体会
(3) 设置停止标志,当程序接收到停止命令时即停止。
.1.2. 选题背景
IP数据包是网络协议学习过程中容易接触到的,选择这个题目一是 为了将自己的所学知识加以运用,二是希望通过探索实践去实现题 目,在实践和实际的项目中提高自己的编程能力。因此我选定了这 个题目。
.2. 关于编译软件
本程序使用C#语言,Microsoft Visual Studio 2005进行编译。 Visual Studio 是微软公司推出的开发环境,Visual Studio 可以 用来创建 Windows 平台下的 Windows 应用程序和网络应用程序, 也可以用来创建网络服务、智能设备应用程序和 Office 插件。
toolStripComboBox1.Items.Add(ip.ToString()); } } 具体结果如图3-2所示。
图3-2
2.4.3. 显示列表
捕获数据后,触发事件,在事件处理函数里,将传递的参数信息添
加到主ket_PacketArrival(object
第1章 引言
.1. 关于题目 .1.1. 题目要求
(1) 捕获网络中的IP数据包,解析数据包的内容,显示结果,并将 结果写入日志文件。
(2) 显示的内容包括:捕获的IP包的版本、头长度、服务类型、数 据包总长度、数据包标识、分段标志、分段偏移值、生存时 间、上层协议类型、头校验和、源IP地址和目的IP地址等内 容。
2.2. EventArgs类
class squar {
private string ip_version;// 版本 private uint header_length;//首部长度 private string service_type;//服务类型 private uint total_packet_length;//总长度 private string identification;//标识 private string flags;//标志 private string fragment_offset;//片偏移量 private string time_to_live;//寿命 private string protocol;//协议 private string checksum;//校验和 private string destination_address;//目的IP地址 private string origination_address;//源IP地址 private uint message_length; //数据长度 };
args.DestinationAddress; AddTreeNode addTreeNode = new AddTreeNode(OnAddTreeNode); reeView1.Invoke(addTreeNode, new object[] { rootNode });
} 结果如图3-3所示。
图3-3
2.4.4. 详细信息
点击列表项,该项对应数据包的详细信息会显示在窗体右侧树形显
示。
private
void
treeView1_NodeMouseClick(object
sender,
TreeNodeMouseClickEventArgs e)
{
TreeNode curr = e.Node;
if (curr.Level == 0)
FileStream fs = new FileStream(logName, FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs); foreach (TreeNode tr1 in treeView1.Nodes) {
2.4. 主要功能的实现 2.4.1. 程序界面
菜单栏及工具栏包含了基本操作按钮,包括退出程序,关于信息, 选择IP,开始捕获和导出日志。窗体主要为显示报文信息的列表区和具 体字段区,分别用树视图显示。具体界面如图3-1所示。
相关文档
最新文档