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


21

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

Answers:


27

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

arping -U 192.168.1.101

如果您要欺骗地址,则可能需要先运行此地址:

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

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


8
在debian领导下,对我的命令是arping -S ip.to.update -i ethX destination.host。例如:arping -S 10.0.0.2 -i eth0 10.0.0.1
radicand

3
当IP是设备上的别名时(例如,辅助NIC正在使用IP或如果它是使用ifconfig ethx:x类型设置的现有NIS上的别名,我发现有必要如上所述在Linux中对路由器进行设置)的别名)。如果它是主要的,则似乎从来没有必要。

8

您正在寻找的被称为“ 免费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
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
laptop:~$ 

-1

没有必要。如下所示:更改IP时,计算机应该会自动执行此操作。如果片段是硬编码的,则广播将不会更改已编码的替代。

我从事IT工作已有20年了,在这段时间内,我从来没有(!)在没有故障设备的情况下发生这种情况。


问题是我不小心分配了使用了IP的新机器,因此它们与IP冲突。我无法使用SSH访问旧计算机。现在我远程关闭了错误的(新)计算机,但是我仍然无法访问旧计算机,我怀疑路由器已在其ARP表中缓存了MAC地址。
霍华德

1
这就是所谓的'免费ARP '' -看en.wikipedia.org/wiki/...
Kimvais

应在arp缓存过期后工作。您还可以尝试从以下位置刷新尝试访问旧计算机的计算机上的arp表
Kimvais 2010年

4
@TomTom-也许您只是没有在合适的环境中工作才能看到它。发送不请自来的ARP数据包是在故障转移情况下将流量快速重新路由到新服务器的常用方法。否则,许多高端交换机和路由器可能需要花费几分钟才能识别出IP地址已移至其他物理端口。思科交换机为此而臭名昭著。
tylerl

4
@TomTom:是的,如果您要通过心跳/同步同步进行故障转移,则可以。但是,如果您将服务从一台机器手动移动到另一台机器,尤其是在使用Cisco设备的情况下,则手动发送免费ARP非常有用。我同意这不是您经常做的事情,但是作为从事IT工作20年的人,我发现自己处于许多需要做的情况中。
肖恩·赖夫施奈德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.