子网中的某些客户端已缓存具有旧 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 年了,在这期间我从来没有 (!) 遇到过没有设备故障的情况。