原始socket实现局域网ARP欺骗

本文参考了http://blog.chinaunix.net/uid-23069658-id-3280895.html, wjlkoorey258大神的文章,感谢ARPwjlkoorey258,欺骗的原理其实很简单,在局域网中,各个主机之间的通信是通过MACA地址识别的,比如:主机A要给B主机发送数据,主机A将封装好了后的数据包的物理链路层里面的targetMAC地址写入B的MAC地址,这样B在接收到数据包后,发现target地址是自己,就会接收此数据包,不是则会丢弃(除非开启混杂模式),如果主机A要想连入internet,那么必须要通过网关,主机A此时将数据报发送给网关(一般就是路由器),网关发现目标IP不在局域网,就会向外界转发,那么同样的,主机A向路由器发送数据时,也需要路由器的MAC地址,这样路由器才能接收,(PC上有个东西叫ARP缓存,它将常用的IP地址和MAC地址对应起来,发送数据时直接将缓存里面的MAC地址填入链路层首部),ARP协议就是用来通过IP地址获得MAC地址的协议,通过这个协议,A在发送数据时,如果不知道对方的MAC地址,就会启动ARP协议来发送一个数据包,这个数据包的targetMAC地址是FF:FF:FF:FF:FF:FF,这个数据包会被局域网里面的所有主机接收到,如果发现tarip是自己时,就会发送一个响应包,里面包含了自己的MAC地址,这个响应包会被A收到,然后将此MAC地址存入ARP缓存,下一次给这个主机发送数据时直接用缓存里面的MAC地址。

如果我们给局域网里面的每一台电脑发送一个ARP响应包,这个响应包的内容是:网关的MAC地址是XX:XX:XX:XX:XX:XX(假的MAC地址),那么每台主机收到响应包后都会将自己的arp缓存表更新,将里面网关的MAC地址换成我们设置的假MAC地址,这样主机在向网关发送数据时,由于targetMAC地址不是网关的MAC地址,所以网关不会接收,从而不会向外界转发数据,即上不了网。

开始本来想欺骗网关的,即给网关发送ARP响应包,但是发现没作用,就改成了欺骗每台主机,这种方法需要知道每台主机的MAC地址,所以要麻烦一点。

效果图(ARP劫持未实现):

源代码地址:http://download.csdn.net/download/u014783685/9947438



猜你喜欢

转载自blog.csdn.net/u014783685/article/details/75221607