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

How*_*ard 23 networking linux arp

子网中的某些客户端使用旧 MAC 地址缓存了 IP,我希望它们通过执行 ARP 广播来更新新值,这在 Linux 中可行吗?

tyl*_*erl 29

是的,它被称为“主动提供的 ARP”或“免费的 ARP”。查看arping的手册页以了解更多详细信息,但语法如下所示:

arping -U 192.168.1.101
Run Code Online (Sandbox Code Playgroud)

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

echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind
Run Code Online (Sandbox Code Playgroud)

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

  • 在 debian 下,我的命令是 `arping -S ip.to.update -i ethX destination.host`。示例:`arping -S 10.0.0.2 -i eth0 10.0.0.1` (10认同)
  • 当 IP 是设备上的别名时(即,辅助 NIC 正在使用该 IP,或者如果它是现有 NIS 上的别名,则它是使用 ` ifconfig ethx:x` 类型的别名)。如果它是主要的,它似乎从来没有必要。 (3认同)

Sea*_*der 9

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

arping -A -i eth0 10.0.0.1
Run Code Online (Sandbox Code Playgroud)

您可以在“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:~$ 
Run Code Online (Sandbox Code Playgroud)