一、ARP 协议
ARP(Address Resolution Protocol)协议工作在网络层和数据链路层之间,通常被认为是一个跨两层的协议。
当网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址来获取目的MAC地址的过程是由ARP(Address Resolution Protocol)协议来实现的。
1. ARP 数据包格式
说明:
- Hardware Type:表示硬件地址类型,一般为MAC地址。它的值为1表示以太网地址。
- Protocol Type:表示三层协议地址类型,一般为IP。它的值为0x0800即表示IP地址。它的值与包含IP数据报的以太网数据帧中的类型字段的值相同。
- Hardware Length和Protocol Length:表示MAC地址和IP地址的长度,单位是字节。值分别是6和4。(6 * 8=48,4 * 8 = 32)
- Operation Code:指定了ARP报文的类型,包括ARP Request和ARP Reply。(1为ARP请求,2为ARP应答)
- Source Hardware Address:指的是发送ARP报文的设备MAC地址(源MAC地址)
- Source Protocol Address:指的是发送ARP报文的设备IP地址(源IP地址)。
- Destination Hardware Address:指的是接收者MAC地址,在ARP Request报文中,该字段值为0(目的MAC地址)。
- Destination Protocol Address:指的是接收者的IP地址(目的MAC地址)。
ARP Request 请求包
ARP请求是广播包,并且数据包长度不够的话会补齐,最小长度是46,但是正常的ARP只有28,所以会使用PAD字段进行补齐。
ARP Reply 响应包
ARP响应是单播
2. ARP 工作过程
通过ARP协议,建立目的IP地址和MAC地址的映射。通过网络层获取目的IP地址还要判断目的MAC地址是否已知。如在主机A发送数据给主机C时,首先获取主机C的MAC地址。同时主机B是看不到主机A和主机C之间的单播包的。
3. ARP 缓存
存放IP地址和MAC地址关联信息
- 发送信息前,查找ARP缓存表,存在对方MAC地址,直接封装成帧。如果不存在,通过发送 ARP Request报文获取对方MAC地址。如果目标在其他网络,源设备会先查找网关MAC地址,将数据发给网关,再转发。
- IP和MAC关系映射关系会放入ARP缓存表一段时间,有效期内都可查到,过了这个有效期会自动删除。
Windows查看ARP缓存表
arp -a
清空ARP表
arp -d
4. ARP 请求
主机A 的 ARP 缓存表中不存在主机C 的 MAC 地址,所以主机A 会发送 ARP Request 来获取目的 MAC 地址。
ARP Request 报文封装在以太帧里。帧头中的源MAC地址为发送端主机A 的 MAC 地址。
此时,由于主机A不知道主机C 的 MAC 地址,所以目的 MAC 地址为广播地址 FF-FF-FF-FF-FF-FF。(注意:目的 MAC 地址FF-FF…是帧头部中的,目的 MAC 地址00-00…是 ARP 请求包中里的内容。)
ARP Request 报文中包含源 IP 地址、目的 IP 地址、源 MAC 地址、目的 MAC 地址,其中目的 MAC 地址的值为0。
ARP Request 报文会在整个网络上传播(广播),该网络中所有主机包括网关都会接收到此 ARP Request 报文。所有设备收到 ARP 请求后,主机C 检查请求中的目标 IP 地址是否与自己的 IP 地址匹配。如果匹配,主机C 会发送一个ARP 响应给主机 A(单播)。主机A 接收到主机C 的 ARP 响应后,会将主机C 的 IP 地址和 MAC 地址的映射关系存储在自己的 ARP 缓存表中,以便将来的通信中使用。
网关将会阻止该报文发送到其他网络上。
5. ARP 响应
主机C会向主机A回应ARP Reply报文。ARP Reply报文中的源协议地址是主机C自己的IP地址,目标协议地址是主机A的IP地址,目的MAC地址是主机A的MAC地址,源MAC地址是自己的MAC地址,同时Operation Code被设置为Reply(Operation Code:指定了ARP报文的类型,包括ARP Request和ARP Reply。)。ARP Reply报文通过单播传送。
这样主机A就可以拿到主机C的mac地址,从而封装报文进行数据发送。
ARP请求
- 帧头的目的MAC用广播形式进行发送,ARP请求包中的目的MAC值为0,操作类型为Request。同时,网关会阻止该报文发送到其他网络。
- 所有主机收到后,会检查IP地址是否匹配,不匹配则不响应,匹配后主机C把源MCA和IP地址将记录到自己ARP缓存表中。发送ARP Reply进行响应。
ARP响应
- 向主机A发送的ARP Reply报文,源地址和源MAC都是主机C的地址,操作类型为Reply,以单播形式传送。
- 主机A收到Reply报文后,检查MAC地址是否匹配,然后将源MAC和源IP地址记录主机A的ARP缓存表中。
6. ARP 代理
在某些情况下,网络中可能会存在ARP代理。ARP代理是一种允许一个设备(代理)代表其他设备进行ARP请求和响应的网络配置模式。当一个设备需要发送数据到另一个子网或者在本地网络上没有直接连接的目标主机时,它可以将ARP请求发送给代理设备。
说明:
-
同一网段,不同物理网络上的计算机之间,通过ARP代理进行相互通信,默认所有的路由器是不开起ARP代理的。因为路由器无法转发广播报文,主机B收不到ARP Request报文,也无法进行应答。
-
路由开启代理ARP功能后,路由器收到ARP Request报文后会先去查找路由表,如果存在主机B的路由表,那么路由器会把自己的G0/0/0接口作为MAC地址回应主机A。主机A通过该MAC地址进行数据转发。
-
主机A 在子网A 中发送一个ARP请求,用来寻找子网B 中的主机B 。路由器R 作为ARP代理收到了ARP请求,这个时候路由器R 会先去查找路由表,发现没有主机B 路由表。然后会在子网B中发送一个ARP请求,寻找主机B的MAC地址。主机B在收到ARP请求后,发送ARP响应,其中响应包中包含了主机B的MAC地址。而路由器收到主机B的ARP响应后,会把自己的G0/0/0接口MAC地址信息返回给主机A,完成ARP代理的全部过程。
ARP协议的一个特性是“后到优先”
- 在某些网络环境中,使用ARP代理可以允许多个设备对同一个IP地址进行ARP请求和响应。当多个设备同时发送ARP请求时,代理设备会收到多个ARP请求,并根据其自身的优先级规则进行处理。具体而言,在ARP代理中,后到的ARP请求会覆盖先前的ARP请求,从而实现"后到优先"的特性。
- 这意味着,如果有多个设备对同一个IP地址发送ARP请求,只有最后一个到达的设备的ARP响应会被接受并记录在ARP缓存中。其他先前的ARP响应将被忽略。因此,后到的设备将成为该IP地址的代理,并负责处理与该IP地址相关的数据包。
在配置路由的时候,如果只写出接口的话就会存在ARP代理的“后到优先”。
上图中R2先进行了ARP回复,那么路由器R1作为ARP代理会记录的是R2路由器的MAC地址。如果路由器R3在之后回复路由器R1,那么后到的会覆盖先前回复的。
7. ARP 探测IP冲突
当局域网中的某台主机被分配了IP地址或者IP地址发生变更后,必须立刻检测其所分配的IP地址在网络上是否是唯一的,以避免地址冲突。主机通过发送ARP Request报文来进行地址冲突检测。
如下:主机A将ARP Request广播报文中的目的IP地址字段设置为自己的IP地址,且该网络中所有主机包括网关都会接收到此报文。当目的IP地址已经被某一个主机或网关使用时,该主机或网关就会回应ARP Reply报文。通过这种方式,主机A就能探测到IP地址冲突了。
8. ARP 协议抓包分析
开启虚拟机,该虚拟机的网卡设置为桥接。
真实机开始 ping 虚拟机的 IP 地址。
同时Wireshark抓包
9. ARP 断网攻击
ARP欺骗原理
在局域网中,主机通信前必须通过ARP协议把IP地址转换为MAC地址,ARP欺骗就是通过伪造IP地址与MAC地址的映射关系实现的一种欺骗攻击。因为局域网内的主机根据MAC地址进行通信,发送方检查其ARP缓存中是否已存储目标IP的MAC地址,否则它会广播发送ARP请求报文,只有目标IP的主机才会响应一个包含其MAC地址的ARP应答报文,发送方收到该应答后,立即更新自身的ARP缓存。攻击者可以发送虚假的ARP请求或应答报文,使得目标主机接收错误的IP和MAC绑定关系。
流程:pc1想与pc2通信时,先在arp缓存表(arp -a)中查看pc2(10.9.136.55)的mac地址,若没有,则会发送广播包:”谁是10.9.136.55“给交换机,交换机给每个端口都会广播发送一个请求包:”谁是10.9.136.55“,正常来说只有pc2会收到这个请求包然后会发送一个应答包:“我是10.9.136.55,我的mac地址是mac2”发送给交换机,交换机会发送给pc1,因为是pc2应答pc1的应答包,pc1接收到应答包后会更新自己的arp缓存表。
arp缓存表中存入了大量的IP地址与MAC地址的映射。
ipconfig /all # 查看网关接口
arp -a #mac地址缓存表(ip地址与mac地址映射表)
找到网关的MAC地址。
现在通过网关访问百度,必然要和路由器进行通信。局域网里面的通信会先去arp缓存表中查找有没有网关对应的MAC地址。
本来和网关是不能通信的,现在通过ARP广播找到了网关的IP地址和MAC地址映射到ARP缓存表中。
攻击者可以发送虚假的ARP请求或应答报文,使得目标主机接收错误的IP和MAC绑定关系。那么发送给百度的数据就不再走网关了,而是到攻击者那里。如果攻击者拦截数据包不进行转发的话,本机就会断网。
攻击实验
win7中的网关是192.168.188.2
对应网关的MAC地址
然后开始ping百度,这个时候可以一直ping
通过kali发起ARP断网攻击,开启终端输入命令如下:
arpspoof -i etho -t 192.168.188.130 -r 192.168.188.2
说明:
-
arpspoof:是一款进行arp欺骗的工具,攻击者可以通过它来毒化受害者arp缓存,将网关mac替换为攻击者mac,然后攻击者可截获受害者发送和收到的数据包,可获取受害者账户、密码等相关敏感信息。
-
-i:指定要使用的接口(即指定一块网卡)。
-
etho:这个网卡和网关属于同一网段的。
-
-t:是要攻击的IP地址(这里是Win7的IP地址)。
-
-r:是网关的IP地址。
发起攻击
发起攻击后Win7已经不能和百度进行通信了
检查Win7的ARP缓存表
之前网关对应的MAC地址是00-5a-56-ee-91-e6,而现在对应的是00-0c-29-70-2e-59。而这个00-0c-29-70-2e-59MAC地址正是Kali的MAC地址。
预防措施:
- 客户端静态绑定网关的真实MAC地址。
- 在交换机和路由器上设置端口与MAC地址的静态绑定。
- 定期检测自身的ARP缓存,检测是否有MAC地址相同的不同表项,即可发现异常。
- 使用防火墙持续监控ARP缓存,检测异常变化。
10. 总结
-
网络设备在什么情况下发送ARP Request?文章来源:https://www.toymoban.com/news/detail-769753.html
- 源设备在发送数据给目的设备前,会首先查看自身的ARP缓存,查找ARP缓存中是否存在目的设备的IP地址和MAC地址的映射。如果存在则直接使用,如果不存在则会发送ARP Request。
-
网络设备什么时候产生免费ARP?文章来源地址https://www.toymoban.com/news/detail-769753.html
- 当网络上的一个设备被分配了IP地址或者IP地址发生变更后,可以通过免费ARP来检查IP地址是否冲突。
到了这里,关于TCP/IP详解——ARP 协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!