0%

《计算机网络》ARP协议

ARP协议

arp协议叫做地址解析协议,处于4层网络模型中的网络层。可以通过目标Ip得到目标的Mac地址。与IP协议同级,位于以太帧负载之中。

ARP报文格式

arp格式

ARP工作原理

同一个局域网内,A需要和B通信时,A只知道B的ip地址,但A还需要知道B的Mac地址,才能正确的把以太网帧(假设这里使用的以太网协议)发送给对方,因为以太网协议中必须指定目标Mac地址。

但是A机器的Arp缓存中没有B机器IP和Mac的对应关系,这个时候A需要向局域网发送一个ARP广播,在以太网帧中将目标Mac地址设置为ffffffffffff,在ARP协议数据中指定要请求的IP是B机器的IP。

这样的话,局域网中其他机器都会收到这个请求,每个机器收到请求后都会检查这个arp请求是请求的哪个ip,是不是自己的ip,如果不是,则忽略这个请求,如果是,则回复这个arp请求。

因为A发送的ARP请求在以太网协议中已经指明了自己的Mac地址,所以B可以定向给A发送ARP回复,回复中会附带自己的Mac地址

A收到B的回复后,会将B的IP与B的MAC地址对应关系缓存到ARP缓存表里面,便于后面直接使用(缓存是有时效的)

ARP攻击

上面的原理是基于局域网内各个机器是互相信任的。所以ARP请求不会受到各个机器的审查。

这里就出现了攻击事件。就是B一直向A定向发送ARP回复,回复里面给的是C(一般都是网关)的ip对应的Mac不是C的Mac地址,而是B随便伪造的一个Mac地址D

这就导致A访问外网的数据都流向了D,因为D是随便伪造的,可能局域网中都没有这个网卡。自然A就无法正常上网,也就是A断网了。如果攻击持续,A就会持续断网

ARP欺骗

arp欺骗比arp攻击更具有危害性

B一直向A定向发送ARP回复,回复里面给的是C(一般都是网关)的ip对应的Mac不是C的Mac地址,而是B伪造的一个Mac地址,这个地址是B自己的Mac地址

这就导致A访问外网的数据全部发给了B,然后B再将外网返回的数据转发给A,这时候A能正常访问网络,但是不幸的是,A的机密信息B全部都知道了,A全然不知。这样就形成了中间人攻击

相关防护

既然ARP相关攻击是通过重复应答实现的,那么只需要在本机添加一条静态的ARP映射,这样就不需要通过发送arp请求来询问网关MAC地址了,这种方法能防止自己不被欺骗

但是要防止网关不被欺骗,还需要在网关中也添加一条到主机的静态ARP映射

另外,一般杀毒软件都是具备arp防护功能的,建议普通用户安装一个杀毒软件

源码学习

arping是C写的,可以去研究源码 https://github.com/ThomasHabets/arping

我这里使用Golang写了一个简易版本,Golang看起来也容易理解,大家可以去研究一下,也欢迎一起完善Golang版本的arping https://github.com/pefish/go-arping




微信关注我,及时接收最新技术文章