两个都:
sudo ip -s -s neigh flush all
Run Code Online (Sandbox Code Playgroud)
和:
sudo arp -d 192.168.0.102
Run Code Online (Sandbox Code Playgroud)
而不是清除 arp 缓存,它们似乎只是使条目无效(它们将显示为incomplete)。即使几分钟后,ARP 缓存看起来像:
$ arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.0.103 (incomplete) eth0
192.168.0.1 ether DE:AD:BE:EF:DE:AD C eth0
Run Code Online (Sandbox Code Playgroud)
(网关的MAC已经刷新了——没问题)
我怎样才能真正清除 ARP 缓存,例如“从表中删除所有条目”?我不希望保留不完整的项目,我希望他们删除。这可能吗?
这是我的系统:
» arp --version
net-tools 1.60
arp 1.88 (2001-04-04)
+I18N
AF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE
HW: (ether) +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64
» lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.2 LTS
Release: 14.04
Codename: trusty
» uname -a
Linux polyphemus.xxx-net 3.13.0-46-generic #77-Ubuntu SMP Mon Mar 2 18:23:39 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
nye*_*yet 13
ip link set arp off dev eth0 ; ip link set arp on dev eth0
Run Code Online (Sandbox Code Playgroud)
请务必一次性完成所有操作,以免在重新打开 ARP 之前中断网络连接。
interfaces=$(
arp -n | awk '
NR == 1 {next}
{interfaces[$5]+=1}
END {for (interface in interfaces){print(interface)}}
'
);
for interface in $interfaces; do
echo "Clearing ARP cache for $interface";
sudo ip link set arp off dev $interface;
sudo ip link set arp on dev $interface;
done
Run Code Online (Sandbox Code Playgroud)
注意:分号允许您将此命令压缩为单行,但它在 SO 上的代码块中看起来很糟糕。
pi@raspberrypi:~ $ arp -n
Address HWtype HWaddress Flags Mask Iface
10.0.0.1 ether 58:19:f8:0d:57:aa C wlan0
10.0.0.159 ether 88:e9:fe:84:82:c8 C wlan0
pi@raspberrypi:~ $ interfaces=$( arp -n | awk ' NR == 1 {next} {interfaces[$5]+=1} END {for (interface in interfaces){print(interface)}} '); for interface in $interfaces; do echo "Clearing ARP cache for $interface"; sudo ip link set arp off dev $interface; sudo ip link set arp on dev $interface; done
Clearing ARP cache for wlan0
pi@raspberrypi:~ $ arp -n
Address HWtype HWaddress Flags Mask Iface
10.0.0.159 ether 88:e9:fe:84:82:c8 C wlan0
Run Code Online (Sandbox Code Playgroud)
您提到的解决方案是刷新 ARP 表的正确且安全的方法:
ip neigh flush all [dev <device>]
如果某些条目被更改为无效,那是临时的并且是 ARP 协议的一部分。重要的是映射已经消失,标记为不完整的 ARP 条目不是表上的 IP-MAC 条目。
我刚刚尝试过这个,就我而言,它立即清除了表格,并且没有留下任何不完整的条目。