LOnils风迷 's Blog

hacking for fun

0x01 ARP协议剖析

 先发第一章看看效果,本来都写在word上的,弄到博客比较麻烦,协议部分基本完成,到时候会弄个pdf出来。

====

    地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址(MAC地址)的一个TCP/IP协议,属于链路层协议。其作用是:主机将ARP请求广播到网络上的所有主机,并接收返回消息,确定目标IP地址的地物理址(MAC地址),同时将IP地址和硬件地址存入本机ARP缓存中,下次请求时直接查询ARP缓存(arp -a)。

    之所以需要MAC地址,是因为在网络中交换机使用了CAM表,表列出了交换机中的每个端口连接设备的MAC地址,当它收到一个指向某个MAC地址的数据包时,交换机会使用这个表,来确定其发送者。如果该目标MAC地址是未知的,就需要使用ARP协议来获取。

    ARP协议的解析过程只使用两种数据包:一个为ARP请求,另一个则是ARP响应。


    在上图中,当不知道需要请求的IP的MAC时,主机就会发出一个ARP请求(其中包含了自己主机的IP和MAC),询问IP为192.168.1.120主机的MAC地址(图中忽略了交换机,其实是交换机发出的那多个包),这个数据包将广播到同网段的所有主机,主机们会查看其中的请求,如果不是自己的IP地址就会自动忽略,而拥有这个IP地址的主机将发送的一个ARP响应(其中包含了192.168.1.120的MAC地址)。 这样一个解析就完成了。

1.1 ARP头部

    为了了解ARP的传输过程,现在我们来深入研究ARP头:


我们忽略以太网首部,单看ARP格式(图示数字代表其域的字节):

  • 硬件类型 Hardware type(16bit): 数据链路层使用的类型数据。以太网是类型1,值为0x0001。
  • 协议类型 Protocol type(16bit): 定义其高层协议类型。对应IPv4协议,值为0x0800。 
  • 硬件地址长度 Hardware size(8bit): 定义以字节为单位的物理(硬件)地址长度,以太网是6。 
  • 协议地址长度 Protocol size(8bit): 定义以字节为单位的逻辑(协议)地址长度,即m的值。IPv4的值为4。 
  • 操作码 Opcode(16bit): 定义分组的类型。ARP请求为0x0001,ARP应答为0x0002;RARP请求为0x0003,RARP应答为0x0004。  
  • 发送方硬件地址 Source hardware address(48bit): 发送者的硬件地址(MAC地址)。
  • 发送方协议地址 Source IP address(32bit): 发送者的高层协议地址(IP地址)。
  • 目的硬件地址 Target hardware address(48bit): 目标接收方的硬件地址(MAC地址)。
  • 目的协议地址 Target IP address(32bit):目标接收方的高层协议地址(IP地址)。

    上面讲解的每个域都能在一一在包中对应


    硬件类型为以太网(1),其高层协议为IP(0x0800),硬件地址长度为6(MAC地址为6byte),高层的地址长度为4(就是IP地址为4byte) Opcode表示该包为请求包。

===============================

    我们通过ARP请求和ARP响应包来进行详解


    从数据包列表中我们可以看见第一个包为请求包,目的包为广播包,第二为ARP响应包。

1.2 ARP请求

我们展开第一个包(其实叫帧,习惯╮(╯_╰)╭):


    其中ARP这一栏中我们可以和上面的ARP头一一对应理解

    我们可以发现在这个ARP请求包中包含了源主机的IP及MAC地址,而目标主机的MAC地址为00:00:00:00:00:00 ,表示不知道其MAC地址。


1.3 ARP响应

现在我们展开其响应包(我们可以在Opcode域看见 reply)


 

可以看见主机D-LINK(192.168.0.1)将自己的MAC地址发送给请求主机HonhaiPr_(192.168.0.114),从而完成了一个完整的ARP过程。


1.4 gratuitous ARP

免费(无偿)ARP,一般来说,一台主机的IP地址是可以改变的,当这种情况出生后,网络主机中缓存IP和MAC对应的缓存表就不再有效了,所以会有一个无偿的ARP包,强制所以收到它的主机去使用新的IP和MAC地址映射。(很多情况都会产生无偿的ARP包,IP改变只是其中的一个)


    首先我们可以发现这是一个广播,你可以发现它很像ARP请求包,但源IP和目标IP是一致的。所以它也可以用过来监测同网段内是否和本机IP地址一样的主机,有时设备改变了硬件地址,通过发送免费的ARP报文通知其它设备更新其ARP表。



评论
热度(3)