arp - yaokun123/php-wiki GitHub Wiki

ARP[Address Resolution Protocol]

一、简介

地址解析协议(Address Resolution Protocol),其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。

二、ARP工作流程

假设主机A和B在同一个网段,主机A要向主机B发送信息,具体的地址解析过程如下:

(1) 主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。
如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。

(2) 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。
ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,
目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。
由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,
但只有被请求的主机(即主机B)会对该请求进行处理。

(3) 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:
将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。
之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。

(4) 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,
同时将IP数据包进行封装后发送出去。

三、ARP报文格式

字段1是ARP请求的目的以太网地址,全1时代表广播地址。

  字段2是发送ARP请求的以太网地址。

  字段3以太网帧类型表示的是后面的数据类型,ARP请求和ARP应答这个值为0x0806。

  字段4表示硬件地址的类型,硬件地址不只以太网一种,是以太网类型时此值为1。

  字段5表示要映射的协议地址的类型,要对IPv4地址进行映射,此值为0x0800。

  字段6和7表示硬件地址长度和协议地址长度,MAC地址占6字节,IP地址占4字节。

  字段8是操作类型字段,值为1,表示进行ARP请求;值为2,表示进行ARP应答;值为3,表示进行RARP请求;值为4,表示进行RARP应答。

  字段9是发送端ARP请求或应答的硬件地址,这里是以太网地址,和字段2相同。

  字段10是发送ARP请求或应答的IP地址。

  字段11和12是目的端的硬件地址和协议地址。

发送包:

响应包

四、ARP攻击

ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的进行。 基于ARP协议的这一工作特性,黑客向对方计算机不断发送有欺诈性质的ARP数据包,数据包内包含有与当前设备重复的Mac地址,使对方在回应报文时,由于简单的地址重复错误而导致不能进行正常的网络通信。

因为这种攻击是利用ARP请求报文进行“欺骗”的,所以防火墙会误以为是正常的请求数据包,不予拦截。因此普通的防火墙很难抵挡这种攻击。需要下载专门的ARP防火墙软件。

有一款叫做“网络执行官”的软件,就是利用ARP欺骗的方式,流氓执法。

arp -a        // 查看arp的所有缓存
arp -a -d     // 清除arp的所有缓存
arp -s 192.168.0.1 mac地址