本文内容包括arp请求、arp代理、免费arp、arp攻击的原理及详细流程.
一,arp请求。
IP数据包,包含源IP地址、源MAC地址,目的IP地址、目的MAC地址。主机发送IP数据包时,首先查看目的IP的网络地址,如果目的网络地址就是主机所在的网络(第一种情况),那么该数据包不会默认发给网关,除非目的IP就是网关的IP。如果目的网络地址不在主机所在的网络(第二种情况),那么该数据包会默认发向网关。其次是查ARP表,填充IP数据包;上述任一情况,源IP/MAC,目的IP都是已经知道的,缺的就是目的MAC地址。如果查ARP表没有发现目的IP对应的MAC地址,那么主机则会向主机所在网络发送ARP广播,请求目的IP的MAC地址。最后,如果有主机回复该ARP请求,那么主机会从ARP回复包中提取目的IP的目的MAC地址,填充完整将要发送的IP数据包,将其发向目的MAC地址。如果主机网络内没有主机回复该ARP请求,那么该IP包将丢弃。
一般主机的ARP请求流程图:
ARP请求数据包结构:
二,免费ARP
免费ARP是ARP请求的一种边界情况,试考虑如果H主机的ARP请求包中,目的IP是本机的IP,会发生什么情况? 一般主机所在网络的其它主机都不会理会该ARP广播;除非该网络上,还有和H主机一样的IP地址的主机存在。如果H主机竟然收到了ARP回复,那么可以判定该网络上有IP地址冲突。免费ARP的作用之一,就是检测IP地址冲突。
免费ARP的作用之二是通告IP对应的MAC地址。如果主机H的IP没变,但是MAC地址改变,那么需要通告网络中其它的主机更新H主机IP地址的MAC地址(比如在HA双机热备份的切换场景中会用到)。更新的细节:如果一台C主机收到一个ARP广播包,先看下包中源IP地址,如果C主机ARP表中没有该 源IP-MAC 对,那么添加该 源IP-MAC 对 进ARP表。如果C主机ARP表中已经有该源IP-MAC 对,并且MAC地址与表中的不一样,那么更新该MAC. 后续将会看到,这种ARP协议的无脑更新方式,为ARP攻击(中间人攻击)打开了后门。
三,ARP代理
ARP代理能够在不影响其他router的路由表的情况下在网络上添加一个新的router,这样使得子网的变化对主机是透明的。注意,在下图的R1链接的左右两个子网(172.16.1.0和172.16.2.0),对于PC5和PC6来说,都是处于同一个网络172.16.0.0,只不过是R1将其物理分隔开了。
R1没有开启ARP代理前,PC5 ping 172.16.2.254 是ping不通的,即使PC5配置了172.16.1.254 的默认网关也是如此。为什么? 对于R1而言,R1收到目的地址是172.16.2.254的ARP广播包后,查看172.16.2.254并不是自己的ip地址,因此对该ARP请求不做应答。对于PC5而言, 在(一,ARP请求)流程图里面,PC5判断172.16.2.254本来就和PC5处在同一网段172.16.0.0中,因此不会走网关这条通道,而是发ARP请求172.16.2.254的MAC地址,172.16.0.0网段内没有172.16.2.254主机,也就没有ARP应答,继而ping程序回复“主机不可达”。
在R1的E0/0/1接口配置 arp-proxy enable 后,R1左边的网络172.16.2.0会被代理。因此凡是PC5发送的172.16.2.0网段的ARP请求,R1都会应答,并且将其E0/0/1的接口MAC地址作为PC5的ARP请求的应答结果。因此PC5的目的是172.16.2.0网段的数据包,都会发往R1的E0/0/1接口。由R1转发给与它直连的172.16.2.0网络。
我们再次在PC5上ping下172.16.2.254,可以看到此时R1不再保持沉默,而是将E0/0/1的MAC地址作为结果应答给PC5.
下图是(PC5)典型的被代理后的ARP表,172.16.2.0网段的ip,均指向54-89-989-59-58-9C的mac
由上面的ARP表可以看出,ARP代理实际上是ARP欺骗的一种情况。R1通过应答PC5的ARP请求,让PC5误以为,为发送的172.16.2.0网段的数据包找到了归宿。实际上172.16.2.0网段的包,对应的实际MAC地址,只有R1知道。如果R1接受到172.16.2.0网段的包后,没有学到该包对应的MAC地址,那么该包同样被丢弃,如果在PC5上ping 172.16.2.99,将会返回“请求超时”的错误。
附加:arp竞争
如果在arp代理的拓扑中,在PC5侧在添加一个PC12,并且配置的 ip 和PC11的 ip 相同;然后在PC5中 ping 冲突的 ip ,会发生什么情况? 如下拓扑图:
PC5目的ip的172.16.2.2数据包,到底是发向PC12还是PC11,由最后一个应答的arp决定。
通过抓包,可以看到PC12和PC11都对PC5的arp请求做了应答。通过PC5的arp缓存表,发现172.16.2.2数据包对应的是以9C结尾的MAC地址。
四,ARP攻击
待续...