在网络中,我们已经了一个IP地址,但是不知道该地址对应的物理地址是多少,就无法正确的传输数据。ARP 地址解析协议就是用于处理这个问题的。
如下,抓一对请求来分析下。
当 192.168.200.14 这个服务器,想要和 192.168.200.155 发起通讯的时候,发现本地 arp 缓存表中没有 192.168.200.155 的以太网地址,这个时候就需要向该网络中发起广播询问,下图是模拟了通信内容。
具体的数据报如下,其中关键 Opcode 1: ARP Request(请求)。相对应的Opcode 2: ARP Reply(应答)。Sender MAC Address 和 Sender IP Address 告知对方,自己的地址,方便被询问方做出应答。Target IP Address 则是需要询问的 IP 地址
应答数据包
和请求数据包类似,只是Opcode字段不一致,以及 Sender 和 Target 置换了位置。
攻击 - ARP欺骗
ARP 表是关联 IP 地址和下一跳 MAC 地址数据表,一般来说实现了 TCP/IP 协议栈的设备都会维护这么一张表。而 ARP 表的建立有 2 种方式。
1.主动询问,如上所示的整个流程,当设备需要和某个 IP 地址的设备进行通讯的时候,需要知道该 IP 的在本网络的的下一跳 MAC 地址,就会主动向网络中的设备发起广播,再通过应答建立关系。
2.被动建立,如果一台机器接受到另外一台设备的ARP请求,就可以在本设备的 ARP 表中建立关联关系。
攻击方式
假设有 3 台设备,A、B、C。A、B为正常设备,切均已建立关系,而C为攻击者,想要窃听AB通信的内容。
1.C现在本地记录AB的 IP 地址和 MAC 地址。
2.伪造数据报,源IP地址:A的IP,**源MAC地址**C的MAC地址,并将该数据报发送给B。B更新ARP表。
3.伪造数据报,源IP地址:B的IP,**源MAC地址**C的MAC地址,并将该数据报发送给A。A更新ARP表。
4.A想要发送数据报给B的时候,数据报中的IP地址是B,MAC地址就是C,这个时候C就截获了该数据,再将该数据包发送给B,或者可以修改其中的数据。
5.相应的响应也是同理。 6.完成了一次arp。