目录
为什么出现ARP?
ARP是如何解决IP地址和MAC地址的映射关系呢?
ARP报文
ARP报文格式
两种基本ARP报文
ARP缓存表
举例
免费ARP
ARP扫描
ARP攻击
ARP攻击产生的原因
ARP攻击实施
ARP攻击本质
ARP攻击类型
断网型
中间人型
DOS型
其他
防范ARP攻击
代理ARP
windows下关于ARP缓存表的命令
-
为什么出现ARP?
- 因为在局域网通信过程中,源设备需要使用目标设备的IP地址和MAC地址,但是通常源设备只知道目标设备的IP地址而不知道目标设备的MAC地址。ARP本质解决的就是在局域网中网络层IP地址和数据链路层MAC地址的映射关系,因为在局域网通信过程中两者缺一不可。
-
ARP是如何解决IP地址和MAC地址的映射关系呢?
-
ARP报文
-
ARP报文格式
-
??
-
ARP报文格式的各个字段解读
-
硬件类型(Hardware type)
- 2个字节,指定网络中使用的硬件类型,例如Ethernet的值为1。
-
协议类型(Protocol type)
- 2个字节,指定网络层协议类型,例如IPv4的值为0x0800。
-
硬件长度(Hardware length)
- 1个字节,指定硬件地址的长度,通常为MAC地址的长度(在Ethernet中为6个字节)。
-
协议长度(Protocol length)
- 1个字节,指定网络层地址的长度,例如IPv4地址的长度为4个字节。
-
操作码(Opcode)
- 2个字节,表示ARP报文的类型,1表示请求,2表示回复。
-
发送方硬件地址(Sender MAC address)
- 变长,由硬件地址长度决定。表示发送方的硬件地址,即源设备的MAC地址。
-
发送方协议地址(Sender IP address)
- 变长,由协议地址长度决定。表示发送方的协议地址,即源设备的IP地址。
-
目标硬件地址(Target MAC address)
- 变长,由硬件地址长度决定。表示目标设备的硬件地址,在 ARP 请求中通常为全0,而在ARP回复中为目标设备的 MAC 地址。
-
目标协议地址(Target IP address)
- 变长,由协议地址长度决定。表示目标设备的协议地址,即目标设备的IP地址。
-
-
-
两种基本ARP报文
-
ARP请求
- 通过数据链路层的广播地址(FF:FF:FF:FF:FF:FF)发送给除了自己之外的同一个局域网的其他设备。
- ??
-
ARP回复
- 当设备的IP地址和ARP请求的目标IP地址一样时,发送ARP回复。
- ??
-
-
-
ARP缓存表
-
临时记录局域网中IP地址和MAC地址的映射关系,当然也可以手动设置IP地址和MAC地址的映射关系。
-
什么时候临时记录呢?
- 当收到ARP请求时(不管目标IP地址是不是自己),记录源IP地址和源MAC地址的映射关系。
- 当收到ARP回复时,记录源IP地址和源MAC地址的映射关系。
-
-
举例
- 当需要通信的目标设备的IP地址和源设备的IP地址在同一网段时,查看ARP缓存表是否有目标设备IP地址映射的MAC地址。如果有就封装IP地址映射的MAC地址发送数据包,否则就发送目标设备IP地址的ARP请求,直到收到ARP回复后,更新ARP缓存表,根据ARP缓存表的目标设备IP地址映射的MAC地址封装数据包发送。
-
-
免费ARP
- 设备通过发送免费ARP(也可以叫ARP宣告)探测手动配置的IP地址在局域网内是否冲突,格式和ARP请求报文一致。
- ?????????
- ????????????????
- 如果有人回复这个免费ARP,说明局域网中已经有设备使用了这个手动配置的IP地址。
-
ARP扫描
- 通过发送目标设备IP地址的ARP请求,探测目标设备是否存活。因为ARP协议的重要性,基本上不会有设备会不响应ARP请求。也可以发送在同一个局域网的所有可能目标设备的IP地址的ARP请求,探测整个局域网存活的设备。
-
ARP攻击
-
ARP攻击产生的原因
- 因为ARP没有对接收到的ARP报文进行认证的机制,而是全部信任并且加入ARP缓存表。于是就出现了利用这个ARP协议缺陷的各种ARP攻击。
-
ARP攻击实施
- 可以利用发包工具,构造ARP请求(回复)报文,通过修改ARP请求(回复)报文字段的发送方MAC地址和发送发IP地址。实现ARP攻击。(其他ARP报文的字段也可以更改,只要不影响发送到目标设备)
-
ARP攻击本质
- ARP攻击本质上是实现对局域网中任何设备的ARP缓存表的更改。
-
ARP攻击类型
-
断网型
- 欺骗目标设备的网关MAC地址为一个错误的MAC地址,造成目标设备无法访问除了本地网络的其他网络。
-
中间人型
- 告诉A设备,B设备的MAC地址为C设备的MAC地址;告诉B设备,A设备的MAC地址为C设备的MAC地址。而C设备有A设备和B设备的正确MAC地址。这样A设备和B设备的通信就会通过C设备这个中间人,中间人再对接收到的数据包进行转发。A设备和B设备是无感知的,都会以为对方的MAC地址就是这个。这样中间人就可以实现对A设备和B设备的通信流量进行监控和劫持,如果通信流量是明文(比如DNS报文)的话,这将是致命的。
-
DOS型
- 通过发送大量错误或正确的ARP报文,浪费大量网络资源。可能会造成网络瘫痪等严重问题。
-
其他
- 欺骗局域网内所有设备,网关MAC地址为FF:FF:FF:FF:FF:FF,会造成网络资源的浪费。
- 欺骗局域网内所有设备,网关的MAC为A设备的MAC地址。如果局域网内设备很多,可能会导致A设备遭受到DOS攻击,CPU占用过高,导致电脑无法正常使用。
-
-
防范ARP攻击
-
我们知道了ARP攻击本质上是实现对局域网中任何设备的ARP缓存表的更改。就可以通过手动配置ARP缓存表和阻止ARP攻击报文发送到目标设备或者目标设备不信任ARP攻击报文来实现对ARP攻击的防范。
- 手动配置ARP缓存表需要消耗大量的时间和精力,但是效果最好。
- 阻止ARP攻击报文发送到目标设备,可以通过配置交换机等网络设备实现。
- 目标设备不信任ARP攻击报文,需要通过一些手段识别ARP报文是否为攻击报文,实现较为复杂。
-
-
-
代理ARP
- 以后补充
-
windows下关于ARP缓存表的命令
-
arp -a
- 显示所有接口的ARP缓存表
-
arp -a -v
- 显示所有接口更详细的ARP缓存表
-
arp -a x.x.x.x
- 显示指定IP地址和MAC地址的映射关系
-
arp -a -N x.x.x.x
- 通过接口上的IP地址显示接口上的ARP缓存表
-
arp -s x.x.x.x xx:xx:xx:xx:xx:xx
- 手动添加IP地址和MAC地址的映射关系
-
arp -d
- 清除所有接口的ARP缓存表
-
arp -d x.x.x.x
- 删除指定IP地址和MAC地址的映射关系
-