一、准备工作:
1、本机环境:Windows XP SP3、电信ADSL 2M家庭宽带
2、开发工具:WildPackets OmniPeek V5.1.4
Visual C++ 6.0
FlexEdit V2.3.1871
二、ARP协议概念:
1、ARP的数据结构
2、ARP和RARP使用相同的报头结构,如图所示。
硬件类型字段:指明了发送方想知道的硬件接口类型,以太网的值为1;
协议类型字段:指明了发送方提供的高层协议类型,IP为0800(16进制);
硬件地址长度和协议长度:指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;
操作字段:用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;
发送方的硬件地址(0-2字节):源主机硬件地址的前3个字节;
发送方的硬件地址(3-5字节):源主机硬件地址的后3个字节;
发送方IP(0-1字节):源主机硬件地址的前2个字节;
发送方IP(2-3字节):源主机硬件地址的后2个字节;
目的硬件地址(0-1字节):目的主机硬件地址的前2个字节;
目的硬件地址(2-5字节):目的主机硬件地址的后4个字节;
目的IP(0-3字节):目的主机的IP地址。
三、分析数据包:
1、先看ARP请求(ARP Request):
2、再看ARP应答(ARP Response):
四、相关代码:
1、下面是MSDN中实例代码,用来向指定IP地址发送ARP请求,来获取他的MAC地址:
2、程序运行效果: