网络协议分析获取并解析ARP

上传人:人*** 文档编号:499405360 上传时间:2024-01-26 格式:DOCX 页数:15 大小:25.40KB
返回 下载 相关 举报
网络协议分析获取并解析ARP_第1页
第1页 / 共15页
网络协议分析获取并解析ARP_第2页
第2页 / 共15页
网络协议分析获取并解析ARP_第3页
第3页 / 共15页
网络协议分析获取并解析ARP_第4页
第4页 / 共15页
网络协议分析获取并解析ARP_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《网络协议分析获取并解析ARP》由会员分享,可在线阅读,更多相关《网络协议分析获取并解析ARP(15页珍藏版)》请在金锄头文库上搜索。

1、网络协议分析报告题目:获取并解析网络中的ARP数据包学院:计算机科学与技术学院专业:计算机科学与技术班级: 0411203学号: 2012211699姓名:李传根一、要求及功能编程序,获取网络中的 ARP 数据包,解析数据包的内容,将结果显示在标准 输出上,并同时写入日志文件.运行格式:程序名 日志文件二、原理及方法20什么是ARP地址解析协议(Address Resolution Protocol, ARP)是在仅知道主 机的 IP 地址时确定其物理地址的一种协议。因 IPv4 和以太网的广泛 应用,其主要用作将IP地址翻译为以太网的MAC地址,但其也能在 ATM 和 FDDIIP 网络中使

2、用从 IP 地址到物理地址的映射有两种方式: 表格方式和非表格方式。ARP具体说来就是将网络层(IP层,也就是相 当于OSI的第三层)地址解析为数据连接层(MAC层,也就是相当于 OSI 的第二层)的 MAC 地址。在以太网协议中规定,同一局域网中的一台主机要和另一台主 机进行直接通信,必须要知道目标主机的MAC地址.而在TCP/IP协议 栈中,网络层和传输层只关心目标主机的 IP 地址。这就导致在以太 网中使用 IP 协议时,数据链路层的以太网协议接到上层 IP 协议提供 的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的 主机的 IP 地址,获得其 MAC 地址这就是 ARP

3、协议要做的事情。所 谓地址解析(address resolution)就是主机在发送帧前将目标IP地址 转换成目标 MAC 地址的过程。另外,当发送主机和目的主机不在同一个局域网中时,即便知道 目的主机的 MAC 地址,两者也不能直接通信,必须经过路由转发才 可以。所以此时,发送主机通过 ARP 协议获得的将不是目的主机的真 实 MAC 地址,而是一台可以通往局域网外的路由器的某个端口的 MAC 地址。于是此后发送主机发往目的主机的所有帧,都将发往该路 由器,通过它向外发送。这种情况称为ARP代理(ARP Proxy)。2.1、ARP协议及工作原理ARP协议是“Address Resoluti

4、on Protocol(地址解析协议)的缩写。 在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。 在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的 MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得 的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址 的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。ARP的基本运彳丁过程:1、主机A希望发送数据分组给主机B,但不知道B的物理地址。2、A发送广播报文,要求B主机用用他的物理地址来响应。3、网站上所有的主

5、机都接收到这个分组。4、B识别自己的IP地址,发送响应报文,告诉A自己的物理地址。2.2、ARP的分组格式物理帧头ARP帧结构填充数据CRC (4B)(14B)(28B)(18B)图一 ARP分组格式目的 MAC (6B)源 MAC (6B)类型(2B)图二 物理帧头08162432硬件类型(Et herne t:0x1)上层协议类型(IP: 0x0800)硬件地址长度(0x6)IP地址长度(0x4)操作(请求:0x1;应答:0x2)源MAC地址源MAC地址源IP地址源IP地址目的MAC地址目的MAC地址目的IP地址图三ARP帧结构2。3工作原理源主机在传输数据前,首先要对数据进行封装,在该过

6、程中会把目的主机的 IP地址和MAC地址封装进去。在通信的初始阶段,我们能够知道目的主机的IP 地址,而MAC地址是不知道的。这时如果目的主机和源主机在同一网络内,源主 机会以第二层广播的方式发送ARP请求报文。ARP请求报文中含有源主机的IP 地址和MAC地址,以及目的主机的IP地址。当报文通过广播的方式到达目的主 机时,目的主机会响应请求报文,并返回ARP响应报文,从而源主机就可以获得 目的主机的MAC地址,同样目的主机也可以获得源主机的MAC地址。如果目的主 机和源主机地址不在同一个网络中,源主机发送的IP数据包会送到交换机的默 认网关,而默认网关的MAC地址同样可以通过ARP协议获取。

7、经过ARP协议解析 IP地址之后,主机会在缓存中保存IP地址和MAC地址的映射条目,此后再进行 数据交换只要从缓存中读取映射条目即可。2.4 ARP包的填充将命令行的参数作适当的转换后填到ARP分组结构的个字段中即可.要注意的是,填充请求包时,因为包要在Ethernet上广播,所以,物理帧头 的“目的MAC”字段要填充为FFFFFFFFFFFF;而ARP帧结构中的目的MAC可填充 任意值,因为它此时不起作用.“填充数据字段要填充为0。三、源程序核心函数说明#include# includefstream。hincludepragma comment(lib,#pragma comment(li

8、b,”/定义ARP包数据struct arppktunsigned short hdtyp;unsigned short protyp;unsigned char hdsize;unsigned char prosize;unsigned short op;u_char smac6;u_char sip4;u_char dmac6;u_char dip4;void packet_handler ( constpkt_data,ostream& out)ws2_32.libwpcap。)lib”)/硬件类型/协议类型/硬件地址长度/协议地址长度/(操作类型)操作值:/源MAC地址/源IP地址/目

9、的MAC地址/目的IP地址pcap_pkthdr header,constARP/RARPu_char /从ARP包中找到头部位置arppkt* arph = (arppkt )(pkt_data +14);/输出源IP地址for(int i=0;i3;i+)outsipi)。;out.setf(ios:left);outsetw(3)int(arphsip3) ;out。 unsetf(ios:left);/输出源MAC地址char oldfillchar=out.fill(0);out.setf(ios:uppercase);for(i=0;i5;i+)outhexsetw(2)smaci

10、)-; outhexsetw(2)int(arph-smac5)” ”; out。 fill(oldfillchar);out.unsetf(ios::hex|ios:uppercase);/输出目的IP地址for(i=0;i3;i+)outint(arphdip3).;out.unsetf(ios:left);outsetw(3)dip3) ;out.unsetf(ios::left);/输出目的MAC地址out。 fill (0);out。 setf (ios: uppercase);for(i=0;i5;i+)outhexsetw(2)dmaci)-;outhexsetw(2)dmac5

11、) out.fill(oldfillchar);out。unsetf( ios:: hex|ios: uppercase);/输出操作类型outop) ”;/输出操作时间struct tm *ltime;ltime=localtime(&header-ts。 tv_sec);out.fill(0);outtm_hour : setw(2)ltime-tm_min : setw(2)ltime-tm_sec;out.fill(oldfillchar);outendl;void main(int argc,char *argv )/命令行参数/检查输入命令格式if(argc!=2)coutPlea

12、se inp ut command: ParseArp o utput_f ileendl; return;/初始化网络设备相关参数pcap_if_t alldevs; pcap_if_t *d;pcap_t adhandle;char errbufPCAP_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(&alld

13、evs,errbuf)=-1)coutname,1000,1,300,errbuf)=NULL)coutnUnable 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 )(daddresses-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);re

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

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