计算机网络解析ARP数据包
arp名词解释

arp名词解释ARP(Address Resolution Protocol)是一种网络通信协议,用于将网络层地址(IP地址)转化为链路层地址(MAC地址)。
ARP的作用是帮助网络设备在进行通信时成功地将数据包从源设备传输到目标设备。
在计算机网络中,每个设备都具有唯一的IP地址来进行通信。
IP地址是在网络层进行使用的,用于在网络中定位设备。
然而,在链路层(物理层和数据链路层)中,设备使用的是MAC地址。
MAC地址是与设备网卡硬件相关联的全球唯一标识符,用于在局域网中寻址。
当一个设备试图与另一个设备进行通信时,它需要知道目标设备的MAC地址。
为了获得目标设备的MAC地址,源设备会通过ARP协议发送一个ARP请求广播,该广播中包含源设备的IP地址。
网络中的所有设备都会接收到这个广播消息。
目标设备在收到该消息后,会回应一个ARP响应,包含自己的MAC地址。
源设备通过接收到的ARP响应获取到目标设备的MAC地址,并将其存储在本地的ARP缓存中,供以后使用。
当源设备想要向目标设备发送数据包时,它会检查本地的ARP缓存来查找目标设备的MAC地址。
如果缓存中没有目标设备的MAC地址,源设备会再次发送ARP请求来获取最新的MAC地址。
目标设备收到ARP请求后,会再次发送ARP响应,包含自己的MAC地址。
源设备获取到目标设备的MAC地址后,就可以将数据包封装在链路层的帧中,并将其发送给目标设备。
ARP协议的核心是通过广播信息来获取目标设备的MAC地址,这使得ARP协议具有一定的开销和安全风险。
由于ARP请求和响应在网络中广播,因此可能会导致网络拥堵。
此外,ARP 协议缺乏身份验证和安全机制,可能会受到ARP欺骗攻击,其中攻击者会发送虚假的ARP响应来欺骗源设备。
为了解决上述问题,还有一些衍生的ARP协议,如Gratuitous ARP(免费ARP)和Proxy ARP(代理ARP)。
Gratuitous ARP用于设备在网络重启或更换MAC地址后,向局域网中所有的设备发送一个包含自己新MAC地址的ARP响应,以更新其他设备的ARP缓存。
网络协议分析获取并解析ARP

成绩:网络协议分析报告题目:获取并解析网络中的ARP数据包学院:计算机科学与技术学院专业:计算机科学与技术班级:0411203学号:2012211699姓名:李传根一、要求及功能编程序,获取网络中的ARP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件.运行格式:程序名日志文件二、原理及方法2.0什么是ARP地址解析协议(Address Resolution Protocol,ARP)是在仅知道主机的IP地址时确定其物理地址的一种协议。
因IPv4和以太网的广泛应用,其主要用作将IP地址翻译为以太网的MAC地址,但其也能在ATM和FDDIIP网络中使用.从IP地址到物理地址的映射有两种方式:表格方式和非表格方式。
ARP具体说来就是将网络层(IP层,也就是相当于OSI的第三层)地址解析为数据连接层(MAC层,也就是相当于OSI的第二层)的MAC地址。
在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址.而在TCP/IP协议栈中,网络层和传输层只关心目标主机的IP地址。
这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。
于是需要一种方法,根据目的主机的IP地址,获得其MAC地址.这就是ARP协议要做的事情。
所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。
所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的某个端口的MAC地址。
于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。
这种情况称为ARP代理(ARP Proxy)。
arp协议的作用是

arp协议的作用是ARP协议(Address Resolution Protocol)是一种在计算机网络中,用于解析将IP地址转换为对应的物理地址(如MAC地址)的协议。
它是TCP/IP协议族网络层中的一部分,主要作用是实现IP地址与MAC地址的映射,从而使网络中的设备能够正确地发送和接收数据包。
ARP协议的作用主要包括以下几个方面:1. IP地址与MAC地址映射:在网络中,每个设备都有一个唯一的IP地址来标识自己,而MAC地址则是设备在物理网卡上的唯一标识。
ARP协议通过查询局域网中的其他设备,将IP地址转换为对应的MAC地址,从而实现两者之间的映射。
当一个设备需要发送数据包给另一个设备时,它首先通过ARP协议查询目标设备的MAC地址,然后将数据包发送到该MAC地址上。
2. 解决跨网段通信问题:在局域网内,设备之间的IP地址与MAC地址是一一对应的,ARP协议可以方便地完成IP地址与MAC地址的映射。
但在不同的网段之间进行通信时,需要借助路由器转发数据包,此时ARP协议不再适用。
这时候需要使用ARP的变种协议——RARP(Reverse Address Resolution Protocol)或Proxy ARP来解决跨网段通信问题。
3. 解决局域网中的地址冲突:当两台设备在局域网中拥有相同的IP地址时,则会引发地址冲突问题。
ARP协议可以通过广播方式,向局域网中的所有设备发送ARP请求,并根据接收到的ARP回应来判断该IP地址是否被其他设备使用,从而及时发现和解决地址冲突问题。
4. 缓存地址映射表:ARP协议还具备缓存功能,它会在查询到一个IP地址所对应的MAC地址之后,将这个地址映射关系保存在本地的地址映射表中。
下次再次需要发送数据包给同一台设备时,不需要再次发送ARP请求,而是直接从缓存中获取目标设备的MAC地址,提高了数据传输的效率。
总的来说,ARP协议的作用是为TCP/IP协议族提供了一种解决IP地址与MAC地址映射的方法,从而使得网络中的设备能够准确地找到目标设备,进行数据的传输和通信。
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-网络层协议数据的捕获实验报告。
地址解析协议ARP命令

地址解析协议ARP命令地址解析协议(ARP)是计算机网络中的一种协议,用于将一个IP地址映射到相应的MAC地址。
MAC地址是一个唯一的硬件地址,用于在局域网中唯一标识一个网络设备。
当一个设备需要将数据发送给另一个设备时,它需要知道目标设备的MAC地址。
ARP命令是用来执行地址解析协议操作的命令工具。
ARP命令主要用于在计算机网络中查询和缓存MAC地址。
具体来说,ARP命令可以执行以下操作:1.查询指定IP地址的MAC地址:ARP命令可以用来查询特定IP地址对应的MAC地址。
通过在命令行中输入"arp -a"命令,系统将会显示本地主机的ARP缓存表,包含了目标IP地址对应的MAC地址以及相关信息。
2.清除ARP缓存表:在一些情况下,ARP缓存表可能会出现不正确的条目,导致设备之间无法正确通信。
此时,可以使用ARP命令清除ARP缓存表。
在命令行中输入"arp -d"命令,系统将会清除本地主机的ARP缓存表。
3.添加静态ARP条目:静态ARP条目是手动添加到ARP缓存中的,用于指定一些IP地址对应的MAC地址。
在命令行中输入"arp -s <IP地址> <MAC地址>"命令,系统将会添加一个静态ARP条目到ARP缓存中。
4.修改ARP缓存表的超时时间:ARP缓存表中的每个条目都有一个超时时间,默认情况下为两分钟。
如果需要修改超时时间,可以使用ARP命令。
在命令行中输入"arp -s <IP地址> <MAC地址> temp"命令,系统将会将指定的ARP条目设置为临时条目,不受超时时间限制。
5.刷新ARP缓存表:在一些情况下,需要手动刷新ARP缓存表,以确保其中的条目是最新的。
在命令行中输入"arp -d *"命令,系统将会删除所有ARP条目并重新查询。
总结来说,ARP命令是一种非常有用的工具,可以用来查询、清除和添加ARP缓存表中的地址解析条目。
ARP地址解析流程

ARP地址解析流程地址解析协议(ARP)是一种网络协议,用于将IP地址转换为物理MAC地址。
在计算机网络中,数据通过IP地址在网络上进行通信,但实际的数据包是由物理MAC地址承载的。
因此,为了实现正确的数据传输,就需要将目标IP地址转换为对应的MAC地址。
这就是ARP协议的任务。
1.获取目标IP地址:设备A要发送数据包给设备B,首先需要知道设备B的IP地址。
设备A在数据包中指定目标IP地址为设备B的IP地址。
2.判断目标IP地址是否在本地网络:设备A需要先判断目标IP地址是否在同一局域网中。
如果目标IP地址与设备A的IP地址不在同一网络中,设备A会将数据包发送给默认网关(路由器)。
如果目标IP地址与设备A的IP地址在同一网络中,则继续下一步。
3.查找ARP缓存表:设备A会在本地的ARP缓存表中查找是否有与目标IP地址对应的MAC地址。
ARP缓存表记录了设备在最近的通信中收集到的IP和MAC地址的映射关系。
如果ARP缓存表中有对应的条目,则设备A可以直接使用该MAC地址进行通信,跳到第6步。
如果ARP缓存表中没有对应的条目,则继续下一步。
4.发送ARP请求广播:设备A会在本地网络中发送一个广播ARP请求,请求目标设备的MAC地址。
ARP请求包含了设备A的MAC地址、IP地址和目标IP地址。
设备A将ARP请求通过乙太网广播给所有设备,包括设备B。
5.接收ARP请求并回应ARP响应:设备B接收到设备A的ARP请求后,会检查自己的IP地址是否与请求包中的目标IP地址匹配。
如果匹配,则设备B将自己的MAC地址包含在ARP响应中,并将该响应发送给设备A。
其他设备接收到ARP请求后会根据IP地址进行匹配,不匹配则忽略该请求。
6.更新ARP缓存表:设备A收到设备B的ARP响应后,将设备B的IP地址与MAC地址的映射关系记录在本地ARP缓存表中,以便将来的通信使用。
设备A使用设备B的MAC地址将数据包发送给设备B。
计算机网络实验利用wireshark分析ARP协议—实验六实验报告

信息网络技术实验报告实验名称利用wireshark分析ARP协议实验编号6、1姓名学号成绩2、6常见网络协议分析实验一、实验室名称:电子政务可视化再现实验室二、实验项目名称:利用wireshark分析ARP协议三、实验原理:Wireshark:Wireshark 就是网络包分析工具。
网络包分析工具得主要作用就是尝试获取网络包,并尝试显示包得尽可能详细得情况。
网络包分析工具就是一种用来测量有什么东西从网线上进出得测量工具,Wireshark 就是最好得开源网络分析软件。
当一台主机把以太网数据帧发送到位于同一局域网上得另一台主机时,就是根据48bit 得以太网地址来确定目得接口得、设备驱动程序从不检查IP数据报中得目得IP地址。
地址解析为这两种不同得地址形式提供映射:32bit得IP地址与数据链路层使用得任何类型得地址。
ARP根据IP地址获取物理地址得一个TCP/IP协议。
ARP为IP地址到对应得硬件地址之间提供动态映射。
主机发送信息时将包含目标IP地址得ARP请求广播到网络上得所有主机,并接收返回消息,以此确定目标得物理地址;收到返回消息后将该IP地址与物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
地址解析协议就是建立在网络中各个主机互相信任得基础上得,网络上得主机可以自主发送ARP应答消息,其她主机收到应答报文时不会检测该报文得真实性就会将其记入本机ARP缓存。
四、实验目得:目得就是通过实验加深对数据包得认识,网络信息传输过程得理解,加深对协议得理解,并了解协议得结构与区别。
利用wireshark捕获发生在ping过程中得ARP报文,加强对ARP协议得理解,掌握ARP报文格式,掌握ARP请求报文与应答报文得区别。
五、实验内容:利用wireshark分析ARP协议六、实验器材(设备、元器件)运行Windows得计算机,带有并正确安装网卡;wireshark软件;具备路由器、交换机等网络设备得网络连接。
arp是哪层协议

arp是哪层协议ARP是哪层协议。
在计算机网络中,ARP(Address Resolution Protocol)是一种用于将IP地址转换为MAC地址的协议,它位于OSI模型的网络层和数据链路层之间。
ARP协议的作用是通过广播的方式查询目标设备的MAC地址,以便在数据链路层进行数据包的传输。
首先,让我们来了解一下ARP协议的工作原理。
当一台主机需要与另一台主机通信时,它首先会检查目标主机的IP地址是否在同一子网内。
如果目标主机和发送主机在同一子网内,那么发送主机会发送一个ARP请求广播,询问目标主机的MAC地址。
而如果目标主机不在同一子网内,发送主机会发送ARP请求给网关路由器,由路由器来完成ARP请求的过程。
接下来,让我们来看一下ARP协议的数据包格式。
ARP数据包包含以下几个字段,硬件类型、协议类型、硬件地址长度、协议地址长度、操作码、发送者硬件地址、发送者协议地址、目标硬件地址和目标协议地址。
其中,硬件类型和协议类型分别指定了硬件地址和协议地址的类型,操作码指定了ARP请求或响应的类型,发送者和目标的硬件地址和协议地址则分别指定了发送ARP请求的主机和目标主机的地址信息。
此外,ARP协议还有一个重要的特性就是ARP缓存。
ARP缓存是保存了IP地址和MAC地址的映射关系的表格,它可以帮助主机在通信过程中快速找到目标主机的MAC地址。
当一台主机发送ARP请求后,目标主机会回复一个ARP响应,同时发送主机会将目标主机的IP地址和MAC地址的映射关系保存在ARP缓存中,以便后续通信时直接使用。
在实际应用中,ARP协议扮演着非常重要的角色。
它在局域网中的设备通信中起着至关重要的作用,能够帮助主机快速准确地找到目标主机的MAC地址,从而实现数据包的传输。
同时,ARP协议也存在一些安全风险,比如ARP欺骗攻击,黑客可以利用ARP协议中的漏洞来伪造目标主机的MAC地址,从而实施中间人攻击。
因此,在网络安全方面也需要对ARP协议进行相应的防护和加固。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成绩评定表课程设计任务书摘要本文首先介绍了解析ARP数据包课程设计的目的与意义,本次课程设计的要求,接着说明了,什么是ARP?ARP数据报消息格式以及ARP协议的工作流程加强我们对ARP协议的认识,然后分析了本次课程设计的难点、重点、参考算法、核心代码,以及对运行结果的分析,还有一些相关知识的拓展。
最后对本次课设进行了个人心得的总结。
3相关知识(1)什么是ARP地址解析协议(Address Resolution Protocol,ARP)是在仅知道主机的IP 地址时确定其物理地址的一种协议。
因IPv4和以太网的广泛应用,其主要用作将IP地址翻译为以太网的MAC地址,但其也能在ATM和FDDIIP网络中使用。
从IP地址到物理地址的映射有两种方式:表格方式和非表格方式。
ARP 具体说来就是将网络层(IP层,也就是相当于OSI的第三层)地址解析为数据连接层(MAC层,也就是相当于OSI的第二层)的MAC地址。
在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。
而在TCP/IP协议栈中,网络层和传输层只关心目标主机的IP地址。
这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。
于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。
这就是ARP 协议要做的事情。
所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。
所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的某个端口的MAC地址。
于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。
这种情况称为ARP 代理(ARP Proxy)。
(2)ARP数据报的消息格式网络上的每台主机或设备都有一个或多个IP地址。
IP地址是网络层的地址,在网络层,数据被组装成IP包。
但是发送IP包需要物理设备的支持(通常是Ethernet设备,在本课程设计中我们指定为Ethernet设备),即发送端必须知道目的物理地址才能将IP包发送出去,所以需要一种将IP地址映射为物理地址的机制。
ARP协议就是用来完成这个任务的。
ARP协议能够在同一个物理网络中,在给定目的主机或设备的IP地址的条件下,得到目的主机或设备的物理地址。
ARP协议的数据包格式如图所示:0 8 16 24 31(位)ARP数据包的消息格式下面对数据包的各个部分进行说明硬件类型:指定硬件接口类型。
例如,值为1表示Ethernet●协议类型:指定发送方支持的上层协议的类型●物理地址长度:指定物理(硬件)地址的长度●协议地址长度:网络层协议的地址长度。
若为IP协议,其值为4●操作:指定ARP的操作类型,例如,1表示ARP请求,2表示ARP应答●源物理地址:指定发送方的IP地址●目的物理地址:指定目的物理地址。
●目的IP地址:指定目的IP地址ARP分组必须在数据链路层中被封装成侦,才能发送出去封装形式如图所示(3)ARP协议的工作流程。
1)在发送一个ARP分组之前,源主机首先根据目的IP地址,在本地ARP高速缓存表中查找与之对应的目的物理地址。
如果找到对应的物理地址,就不用进行地址解析,否则需要进行地址解析。
2)实现地址解析的第一步是产生ARP请求分组。
在相应的字段写入本地主机的源物理地址、源IP地址,在目的物理地址字段写入0,并在操作字段写入1。
3)将ARP分组发送到本地的数据链路层,并封装成帧。
以源物理地址作为源地址,以物理广播地址(FF-FF-FF-FF-FF-FF)作为目的地址,通过物理层发送出去。
4)由于采用了广播地址,因此网段内所有的主机或设备都能接受到该帧。
除了目的主机外,所有接受到该分组的主机和设备都会丢弃该分组,因为目的主机能够识别ARP消息中的目的IP地址。
5)目的主机发送ARP应答分组。
在ARP应答分组中,以请求分组中源物理地址、源IP地址作为其目的物理地址、目的IP地址,并将目的主机自身的物理地址、IP地址填入应答分组的源物理地址、源IP地址字段,并在操作字段中写入2。
该分组通过数据链路层以点对点的方式发送出去(因为现在目的方已经知道双方的物理地址)。
6)源结点接收到ARP应答分组,知道对应于目的IP地址的目的物理地址,将它作为一条新记录加入到ARP高速缓存表。
源结点将有完整源IP地址、源物理地址、目的IP地址、目的物理地址的信息和数据作为一个发送分组,传送给它的数据链路层并封装成桢,然后以点对点的方式发送到目的主机。
4课程设计分析1.课程设计中的重点及难点1)程序中会用到Winpcap,Winpcap是Win32环境下数据包捕获的开放代码函数库。
基于Winpcap的应用程序一般按照下面几个步骤进行设计: 输出网卡设备列表。
●选择网卡并打开。
●捕获数据包时,可能需要设置过滤器。
●捕获数据包或者发送数据包。
2)在程序设计过程中需要注意网络—主机字节顺序的转化。
由于不同的计算机系统所采用的数据表示方式不同,对于2B或4B的数据,有的采用低字节地址存放数据的高权值位,而有的却以低地址字节存放数据低权位值,在网络的数据传输中,我们应该统一表示,所以我们在捕获数据包后,应将数据包头部的表示长度或类型的数据转换成本地机的表达形式。
可以利用函数ntohs()将网络字节序转换为主机字节序。
3)选择网卡并打开时,注意选择可用的网卡。
2.参考算法1)取得当前网卡设备列表。
2)选择Ethernet网卡并打开,注意判断所选网卡是否为实际存在的可用网卡。
3)设置过滤器,此处的过滤器正则表达式为“arp”或者“ether proto\\arp”。
4)捕获数据包并进行处理(包括输出各IP地址,物理地址,操作类型以及时间)。
由于要记录日志文件,为了便于输出流参数,建议采用pcap_next_ex()函数。
流程图如图所示:5程序代码#include<conio.h>#include<fstream.h>#include<iomanip.h>#include"pcap.h"#include<winsock2.h>#pragma comment(lib,"ws2_32.lib")#pragma comment(lib,"wpcap.lib")//定义ARP包数据struct arppkt{unsigned short hdtyp; //硬件类型unsigned short protyp; //协议类型unsigned char hdsize; //硬件地址长度unsigned char prosize; //协议地址长度unsigned short op; //(操作类型)操作值: ARP/RARP u_char smac[6]; //源MAC地址u_char sip[4]; //源IP地址u_char dmac[6]; //目的MAC地址u_char dip[4]; //目的IP地址};void packet_handler(const pcap_pkthdr *header,const u_char *pkt_data,ostream& out) {//从ARP包中找到头部位置arppkt* arph = (arppkt *)(pkt_data +14);//输出源IP地址for(int i=0;i<3;i++)out<<int(arph->sip[i])<<'.';out.setf(ios::left);out<<setw(3)<<int(arph->sip[3])<<"";out.unsetf(ios::left);//输出源MAC地址char oldfillchar=out.fill('0');out.setf(ios::uppercase);for(i=0;i<5;i++)out<<hex<<setw(2)<<int(arph->smac[i])<<'-';out<<hex<<setw(2)<<int(arph->smac[5])<<" ";out.fill(oldfillchar);out.unsetf(ios::hex|ios::uppercase);//输出目的IP地址for(i=0;i<3;i++)out<<int(arph->dip[3])<<'.';out.unsetf(ios::left);out<<setw(3)<<int(arph->dip[3])<<' ';out.unsetf(ios::left);//输出目的MAC地址out.fill('0');out.setf(ios::uppercase);for(i=0;i<5;i++)out<<hex<<setw(2)<<int(arph->dmac[i])<<'-';out<<hex<<setw(2)<<int(arph->dmac[5])<<" ";out.fill(oldfillchar);out.unsetf(ios::hex|ios::uppercase);//输出操作类型out<<ntohs(arph->op)<<"";//输出操作时间struct tm *ltime;ltime=localtime(&header->_sec);out.fill('0');out<<ltime->tm_hour<<':'<<setw(2)<<ltime->tm_min<<':'<<setw(2)<<ltime->tm_sec;out.fill(oldfillchar);out<<endl;}void main(int argc,char *argv[ ])//命令行参数{//检查输入命令格式if(argc!=2){cout<<"Please input command: ParseArp output_file"<<endl;return;}//初始化网络设备相关参数pcap_if_t *alldevs;pcap_if_t *d;pcap_t *adhandle;char errbuf[PCAP_ERRBUF_SIZE];u_int netmask;char packet_filter[]="ether proto \\arp";struct bpf_program fcode;struct pcap_pkthdr *header;const u_char *pkt_data;//获取网络设备列表if(pcap_findalldevs(&alldevs,errbuf)==-1){cout<<"Error in pcap_find all devs:"<<errbuf;return;}//选取一个Ethernet网卡for(d=alldevs;d;d=d->next){// 网卡设为混杂模式,接收所有帧if((adhandle=pcap_open_live(d->name,1000,1,300,errbuf))==NULL){cout<<"\nUnable to open the adapter.";pcap_freealldevs(alldevs);return;}//检查数据链路是否为Ethernetif(pcap_datalink(adhandle)==DLT_EN10MB&&d->addresses!=NULL) break;}if(d==NULL){cout<<"\nNo interfaces found! Make sure Winpcap is installed.\n";return;}//获得子网掩码netmask=((sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;//编译过滤器,只捕获ARP包if(pcap_compile(adhandle,&fcode,packet_filter,1,netmask)<0){ cout<<"\nUnable to compile the packet filter.Check the syntax.\n";pcap_freealldevs(alldevs);return;}//设置过滤器if(pcap_setfilter(adhandle,&fcode)<0){ cout<<"\nError setting the filter.\n";pcap_freealldevs(alldevs);return;}//显示提示信息及每项含义cout<<"listening on "<<d->description<<"..."<<endl<<endl;ofstream fout(argv[1],ios::app); //日志记录文件//为了查看日志时的方便,其中加入了日期记录time_t t;time(&t);fout.seekp(0,ios::end);if(fout.tellp()!=0)fout<<endl;fout<<"\t\tARP request(1)/reply(2) on"<<ctime(&t);cout<<"Sour Ip Addr"<<" "<<"Sour MAC Address" <<" "<<"Des Ip Addr"<<" "<<"Des MAC Address"<<" "<<"OP"<<" "<<"Time"<<endl;fout<<"Sour Ip Addr"<<" "<<"Sour MAC Address" <<" "<<"Des Ip Addr"<<" "<<"Des MAC Address" <<" "<<"OP"<<" "<<"Time"<<endl;//释放设备列表pcap_freealldevs(alldevs);//开始截获ARP包int result;while((result=pcap_next_ex(adhandle,&header,&pkt_data))>=0){ //循环解析ARP数据包if(result==0)continue;//解析ARP包,结果输出到屏幕与文件packet_handler(header,pkt_data,cout);packet_handler(header,pkt_data,fout);}}6运行结果与分析相关扩展与分析:本课程设计还可以在Linux环境下用rawsocket完成。