如何在 Linux 中向所有邻居广播 ARP 更新?

如何在 Linux 中向所有邻居广播 ARP 更新?

子网中的某些客户端已缓存具有旧 MAC 地址的 IP,我希望它们通过执行 ARP 广播来更新新值,在 Linux 中可以做到吗?

答案1

是的,它被称为“未经请求的 ARP”或“免费 ARP”。检查arping 手册页了解更多详细信息,但语法如下所示:

arping -U 192.168.1.101

如果您要欺骗地址,则可能需要先运行以下命令:

echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind

最后,由于其欺骗能力,发送未经请求的 ARP 数据包有时被视为“敌对”活动,可能会被忽略,或者可能导致被某些第三方防火墙阻止。

答案2

您正在寻找的内容称为“免费ARP“可以使用“arping”来完成。如果您的 IP 地址是 eth0 上的 10.0.0.1,则可以使用以下命令:

arping -A -i eth0 10.0.0.1

您可以在“arping”运行时使用“tcpdump”验证 ARP 是否正在发送,在本例中,我正在观察“wlan0”:

laptop:~$ sudo tcpdump -lni wlan0 arp    
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:14:11.219936 ARP, Reply 172.16.42.161 is-at a4:77:03:d2:9b:c4, length 28
12:14:12.220119 ARP, Reply 172.16.42.161 is-at a4:77:03:d2:9b:c4, length 28
12:14:13.220288 ARP, Reply 172.16.42.161 is-at a4:77:03:d2:9b:c4, length 28
12:14:13.220397 ARP, Reply 172.16.42.161 is-at a4:77:03:d2:9b:c4, length 28
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
laptop:~$ 

答案3

你需要的是免费 ARP 请求。正如Sebastian Wiesinger 谈 NetworkEngineering该数据包具有以下特点:

  • 数据包中的源 IP 和目标 IP 都是发出免费 ARP 的主机的 IP
  • 目标 MAC 地址是广播 MAC 地址 (ff:ff:ff:ff:ff:ff)
  • 这是一个 ARP 请求,而不是回复

因此,向我的虚拟(附加)ip 192.168.178.55 发送免费 arp 请求是:

arping -i ens192 -U -S 192.168.178.55 192.168.178.55

“-U” 创建未经请求的 arp 请求。“-S <ip>” 确保将 ip 地址设置为源。最后的“<ip>”包含我们请求的 ip 地址(不期望得到答复)。

答案4

没有必要。例如:当您更改 IP 时,计算机应该会自动更改。如果客户端是硬编码的,则广播不会更改硬编码覆盖。

我从事 IT 行业已经大约 20 年了,在这期间我从来没有 (!) 遇到过没有设备故障的情况。

相关内容