https://www.zhihu.com/question/64514922/answer/221264172
这篇文章我看到了三种 免费 ARP 报文,它们的共同点是
但是这三个 免费 ARP 报文 还各不相同:
这是一个 reply 的 免费 ARP 报文,ARP 字段的目的 mac 和源一样
这是一个 reply 的免费 ARP 报文,ARP 字段的目的 mac 是全 1
这是一个 request 的 免费 ARP 报文,ARP 字段的目的 mac 是全 0 (比如,我猜这个是在机器开机的时候使用,查看自己的 ip 地址有没有被别的机器抢占)
所以这三种 免费 ARP 报文 是分别在什么时候使用?(虽然这个问题不重要可能,但还是想问一下)
1
asilin 2021-12-16 09:57:29 +08:00 1
第一种 ARP 回应包没在环境中见过,自己发自己收?不理解,感觉像是 ARP 攻击。
第二种是“免费”ARP 回应包,其与“普通”的 ARP 回应包区别在于: - 目标地址为广播地址 ff:ff:ff:ff:ff:ff - target IP 有值,且值与 sender IP 相同 “免费”ARP 回应包一般很少见,作用和“免费”ARP 请求包一样,都是用于更新当前网络其他主机 /交换机的 ARP 缓存表,但是不一定有效。 实际上我们一般都是用“免费”ARP 请求包来达到相同的作用。 第三种就是常见的“免费”ARP 请求包了,一般都是用来更新当前网络其他主机 /交换机的 ARP 缓存表。 注意:“免费”ARP 请求包并不能用来查看自己的 ip 地址有没有被别的机器抢占,这是“冲突探测”ARP 请求包的功能 至于为什么目标 MAC 是全 0 ,而不是 ff:ff:ff:ff:ff:ff ,这取决于发送机器本身: 一般来说 Linux/Windows 等操作系统就是全 0 ,而一些 TCP/IP 协议栈比较简单的嵌入式设备中,只允许目标 MAC 和 target mac 保持一致,也就是 ARP 请求包的 target mac 都为 ff:ff:ff:ff:ff:ff 至于“冲突探测”ARP 请求包,则是 sendip 为 0.0.0.0 的 ARP 请求包,它之所以这样设计,主要是为了不更新 LAN 内网络的主机 /交换机的 ARP 缓存表,且不期望有回应。 说了这么多,你可能就比较混乱了,主要是 ARP 包的结构导致的,在 ARP 包内部,分别有下面四个字段: - sender mac - sender ip - target mac - target ip 而在 ARP 包外部,则是 L2 层的以太网帧,分别有下面的字段: - 源 MAC - 目标 MAC - 协议类型,这里 ARP 为 0x0806 - ARP 包内容 - FCS 帧校验码 所以,需要明白“target mac”和“目标 MAC”不是一种东西,也就理解上面的话了。 |
2
amiwrong123 OP @asilin #1
谢谢你的详细解答。就有一个点我不是很理解: “免费”ARP 请求包并不能用来查看自己的 ip 地址有没有被别的机器抢占,这是“冲突探测”ARP 请求包的功能。 我知道 “冲突探测”ARP 请求包有这个功能,但是我感觉 “免费”ARP 请求包好像也能检测阿。 比如当你发了“免费”ARP 请求包后,却收到了 ARP 回应报文。(其实我是觉得 这两个包 都能检测 ip 冲突) |
3
asilin 2021-12-18 16:51:10 +08:00 1
“免费”ARP 请求包会导致局域网内的主机 /交换机更新 ARP 缓存表,如果局域网已经有了一台机器拥有对应的 IP ,这个时候,你用“免费”ARP 请求包会导致对方无法上网,相当于你成了 ARP 内网劫持者。
|