ARP欺骗利用了ARP协议本身的哪些机制

       笔者在之前的文章中已经写过了,ARP协议是主机A在了解了主机B的IP地址的前提下,对B发起询问的协议(虽然它叫地址解析协议),但是这里有一个问题,由于IP是动态分配(之后写DHCP协议的时候会提到),那么对于一个动态分配的IP,为它永远绑定一个MAC地址自然是不妥当的,也就是说,ARP缓存肯定是会刷新的,在《TCP/IP详解卷一:协议》中这样写到,从伯克利系统演变而来的系统一般对完整的表项设置超时值为20分钟,而对不完整的表项设置超时值为3分钟。这里我们先不纠结什么叫完整,什么叫不完整,现在还是否适用这些问题,我们需要注意的是,一个表项不管完不完整,它的有效期最多就是20分钟,也就是说,把wireshark打开抓包,最多20分钟,你肯定能够抓到ARP包(本机发给其他人,或者其他人发给本机,因为都要更新),这就是ARP缓存的更新机制。注:经笔者实验,实际有效期应该更短,平均每两三分钟就会有一次询问。

       既然有更新,那么就有之前缓存的舍弃,就是说,如果一台主机A向主机B发送一个ARP请求包,在这个数据包中源IP为192.168.40.1,源MAC为ee-ee-ee-ee-ee-ee,目的IP为192.168.40.2,也就是A的IP,那么主机B首先会在自己的ARP缓存中查找关于这条信息,如果有A的IP-MAC,那么就只会回发一个ARP应答包;如果不存在这样的IP-MAC,之前的表项是192.168.40.1 -bb-bb-bb-bb-bb-bb,这时,B会更新该项为192.168.40.1 - ee-ee-ee-ee-ee-ee,由于局域网的网络传输不是通过IP进行的,而是通过MAC进行的,那么此时,如果一个主机C(在和A,B同一个局域网中)伪造一个ARP请求包发给B,源IP,MAC为192.168.40.1 - ee-ee-ee-ee-ee-e1,那么,B的缓存会更新,而在同时,C向A发送一个ARP请求包,源IP,MAC为192.168.40.2 - ee-ee-ee-ee-ee-e1,A的缓存也会更新,此时在局域网中,A与B之间的通信全都会传输给C,C会可以通过转发A,B的数据包达到在监听的同时,并且不被发现的效果。这里利用了ARP缓存的后者优先的机制,也就是后来的项在满足一些条件后,会挤掉先来的项。

      关于ARP缓存的更新条件,请参考https://blog.csdn.net/wenshifang/article/details/29265721,个人认为写得十分好,总结的十分到位,笔者看后收益良多。

猜你喜欢

转载自blog.csdn.net/fengzhantian/article/details/80518104