ARP欺骗原理详细介绍

  前面我们已经介绍过,一台主机A如果要向目标主机B发送数据,无论主机B在本网段还是在远程网络,这些需要发出去的数据包中需要四样必不可少的地址,那就是源IP地址和源MAC地址,以及目标IP地址和目标MAC地址,当主机B在封装数据包时,自己的IP地址和MAC地址可以正确地,轻易地封装进去,目标IP自己也知道,可以封装进去,可是,关键就在目标MAC该如何得来,由于主机A曾经和主机B发生过通信,曾经通过ARP得到过目标主机的MAC地址,那么它就会把主机B的IP地址和MAC对应地记录下来,放在缓存表中,以备下一次再使用,但要说明的是,因为考虑到主机B有更换网卡的可能,所以无论何时当主机A再次收到关于主机B的MAC地址更新信息,它都将刷新自己的ARP缓存表,将新收到的MAC地址和主机B的IP地址对应起来,正因为主机A在任何时候收到ARP数据包,都将再次更新ARP缓存,所以导致了另外一个令人头疼的事情发生:

  如果现在一台不怀好意的主机C想要窃取网络中的数据或者其它目的,那么这时它就可能向A发送一个ARP数据包,数据包中声称主机B的MAC地址已经改变,当主机A收到后,得知此消息,就立刻更新原来主机B的MAC地址,当它要和主机B进行通信时,就会在数据包中封装新的MAC地址,如果这个MAC地址是前面主机C的,那么主机A就会把本来要发给主机B的数据错误地发给了主机C,被主机C窃取成功,而主机C为了掩人耳目,“看”过数据后,再发给主机B,从而不影响主机A和主机B之间的正常通信,但如果前面主机C发给主机A的ARP更新包中的MAC地址不是自己的,而是伪造的根本不存在的MAC地址,那么这时主机A和主机B之间就不可能再正常通信了,这就是ARP病毒对PC主机在网络间通信造成的严重威胁和后果,造成数据被窃听或网络不通的惨局!

  虽然局域网之间通信是主机与主机之间直接通信,但是,如果要与外网的主机通信,这时,还需要用到网关或路由器(很多情况下一个局域网的路由器就直接充当网关的角色),当局域网内的某台主机A想要与外网的主机通信,那么这时,它在对数据包进行封装时,目标MAC地址需要写成网关的MAC地址,再交由网关代为转发,发到网外去,如果这台主机A在使用ARP数据包请求网关的MAC地址时,出现一台不怀好意的主机向主机A回应了一个ARP回应报,数据包中就将这台病毒主机或者根本不存在的MAC地址告诉主机A,那么这时,主机A发给远程网络的数据由于经过不怀好意的主机“中转”了一下,造成数据被窃听,或因为错误的目标MAC,而最终没有网关给数据进行转发,导致与外网不能能正常通信,这就是为什么ARP病毒不仅能够从主机下手来影响局域网内的通信,也能影响局域网与外网的通信。

  既然ARP病毒可以从主机的下手影响局域网与外网通信,那么它同样又可以从网关和路由器下手来影响网络间的通信,(多数时候路由器直接充当网关),那么ARP病毒是在什么时候来让路由器或网关的ARP缓存产生混乱的呢?那么请先回想一下,局域网内的主机向外网发送数据时,要通过ARP来得到网关或路由器的MAC,就有可能遭到ARP欺骗,然后,当网关或路由器收到来自外网的数据包要发到本地网络时,那么它同样要把这些数据包的目标MAC地址改写成最终接收PC主机的MAC地址,它首先是查自己的ARP缓存表,如果存在它需要的条目,就直接封装进数据发出去,如果缓存表里没有该怎么办呢?

  不错,还是使用老方法,用ARP广播来请求目标的MAC地址,所以这时又会出现什么情况呢,那就是遭到不怀好意的主机发来的错误的ARP回应,让网关路由器在数据包中封装了错误的目标MAC地址,从而造成数据包没有能够正确到达目的地,从而达到这台不怀好意的主机窃取数据和影响网络通信的目的,因为路由器随时收到主机发来的ARP更新包,都会再次把新的MAC和原来的IP地址对应起来,写入缓存表。到这里为止,可以得知,ARP病毒可以通过回应错误的ARP数据包来让主机和路由器的ARP错误,也可以通过随时发送错误的ARP更新包来让主机和路由器的ARP缓存错误,这些错误导致网络的数据被窃听和丢失,都是针对主机和路由器下手的,那么有人应该会问,交换机会不会因为ARP病毒而产生错误呢?那么我可以郑重地告诉大家,ARP病毒所产生的错误与交换机无任何关系,也对交换机不能造成任何后果,理由如下:

  无论交换机在收到主机或者路由器发过来的数据时,都有责任对这些数据进行转发,当它从某个端口收到数据包后,读取数据包中的源MAC地址,从而就得到了此端口和MAC地址的映射表,当它在映射表中还找不到目标MAC地址来确定应该将数据发向哪个端口时,它就会在除源端口之外的其它所有端口进行泛洪(类似广播),这时,因为是泛洪,所以真正的目标主机能够收到这些数据包,也因为交换机在转发数据包的时候,即使ARP缓存表是空的,它也不需要发ARP广播来请求MAC地址,所以也根本不存在ARP欺骗,如果下面继续有其它端口的数据要转发,交换机再使用上面同样的方法,来学习到每个端口对应的MAC地址,就是因为通过这样向其它端口泛洪来学习到端口和MAC地址的映射表,所以交换机从来没有收到过任何关于MAC地址到IP地址的ARP数据包,况且交换机也从来不读取数据包中的IP地址.

在这里可以为交换机总结出:

1.交换机任何时候都不关心IP地址,因为交换机是二层设备,(三层交换机除外,三层交换机就当路由器来对待了)。
2.交换机中的ARP缓存是端口号到MAC地址的映射,与IP地址无关。
3.交换机中的ARP缓存表是通过在转发数据包时读取源端口和源MAC时记录下来的,而不是通过ARP广播去询问的。
4.当交换机的缓存表不能反应出目标MAC和端口的映射时,就会向除源端口外的每个端口发一份(泛洪),以保证真正的目标主机能够收到数据。
5.因为ARP缓存中找不到端口号和MAC地址的映射时,就会泛洪,所以人工地绑定端口和MAC地址只是解决泛洪,让交换机不要因为找不到目标MAC地址而向每个端口都复制数据,这种方法与解决ARP欺骗没有任何关系!

  请仔细理解交换机的工作原理:交换机是根据自己的ARP缓存表来提供数据转发的,ARP缓存中记录着端口号对应的MAC地址,当收到数据需要转发时,先读取数据中的源MAC地址,再看来自哪个端口,然后记录下来写入ARP缓存表,最后交换机查找ARP缓存表以确定该把数据发向哪个端口,如果ARP缓存中没有找到答应,那么这时交换机便决定把数据向除了向源端口之外其它所有端口都复制一份,这样便可以万无一失地把数据送到目的地,除非根本没有这个目的地,所以交换机的ARP缓存表是通过读取需要转发的数据的源MAC和源端口来学习到的,不是通过ARP询问来更新的!

posted @ 2006-11-14 13:19  小y  阅读(2866)  评论(2编辑  收藏  举报