如何清除Linux上的arp缓存?


13

都:

sudo ip -s -s neigh flush all

和:

sudo arp -d 192.168.0.102

他们似乎没有清除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

(网关的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

3
您要在这里完成什么?更明确地说,您要解决什么问题?
EEAA

您缺少arp表条目吗?也许有一个程序要求该IP,从而更新该条目。用wireshark或确认tcpdump
ott

5
@MichaelMartinez因为xy问题。问题似乎不是根本问题,OP应该解决一些潜在的问题。
Zoredache

1
之所以没有此信息,是因为它不相关。我想要一个干净的ARP缓存。句号 你不相信我我想要那个,但这是你的问题,不是我的。我向您保证:我想要一个干净的ARP缓存。
dangonfast 2015年

2
此处有ARP缓存机制的深入说明:stackoverflow.com/a/15511117/647991
dangonfast

Answers:


12
ip link set arp off dev eth0 ; ip link set arp on dev eth0

确保一次完成所有操作,因此在重新打开ARP之前,您不会中断网络连接。


2
一个人必须在shell脚本中或在机器上执行操作,因为在执行第一个命令后似乎断开了连接。
路易斯

我做这件事是一个线,和它的工作:dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev。该sleep可能没有必要。
mivk

5

您的第一个解决方案有效,仅需一点时间(在我对Kali的测试中为5-10秒)即可从“(不完整)”变为没有条目。

大概它在被删除的过程中处于某种过渡状态。


对我来说(Ubuntu 14.04)并非如此:条目长时间(不完整?)保存在不完整状态中。我今天将再次检查。
dangonfast 2015年

已验证:即使过了几分钟,条目仍处于不完整状态(arp 1.88,net-tools 1.60)
dangonfast

那么,您的问题肯定是非标准行为,可能是Ubuntu 14.04特有的。在Linux中执行此操作的正确方法只是对您不起作用。希望您尽快找到答案。如果愿意,可以删除此。
阿玛尼

1
不,离开它,它可以为其他人提供信息。但是我猜想更多的“标准”行为是在Ubuntu中找到的,而不是在Kali中,这是渗透测试的发行版,并且具有针对该用例专门调整的默认值。
dangonfast 2015年

1

在某些系统中,ip命令不可用。

user@linux:~$ ip
-bash: ip: command not found
user@linux:~$

因此,这是ip link set arp off dev eth0; ip link set arp on dev eth0命令的替代方法。

如果要在单个命令中删除表中的所有条目,请使用for loop以下示例。

之前

user@linux:~$ arp
? (10.0.0.1) at 00:00:00:aa:aa:12 [ether]  on eth1
? (172.168.0.3) at 00:00:00:aa:aa:11 [ether]  on eth2
user@linux:~$ 

使用ARP -D命令删除ARP

user@linux:~$ for i in 10.0.0.1 172.168.0.3; do sudo arp -d $i; done
user@linux:~$

之后:消息不完整的条目中的MAC地址被删除

user@linux:~$ arp
? (10.0.0.1) at <incomplete>  on eth1
? (172.168.0.3) at <incomplete>  on eth2
user@linux:~$ 

的确如此,通过使用arp -d命令删除arp ,arp条目仍然存在并带有incomplete消息。

为了解决这个问题,ifconfig ethx up/down像这样使用

之前

user@linux:~$ arp
? (10.0.0.1) at <incomplete>  on eth1
? (172.168.0.3) at <incomplete>  on eth2
user@linux:~$ 

以单个命令禁用和启用接口ETH1和ETH2

user@linux:~$ for i in 1 2; do sudo ifconfig eth$i down; sudo ifconfig eth$i up; done
user@linux:~$ 

TADAAA ...已解决的问题:)

user@linux:~$ arp
user@linux:~$ 

0

您提到的解决方案是刷新ARP表的正确和安全的方法:

ip neigh flush all [dev <device>]

如果某些条目变为无效,则这是临时的,并且是ARP协议的一部分。重要的方面是映射已消失,标记为不完整的ARP条目不是表上的IP-MAC条目。

我刚刚尝试过,就我而言,它立即清除了表,并且没有留下不完整的条目。


在某些(不清楚的)情况下,ip neigh flush all是不够的。就我而言,它没有清除添加了arp -s的条目。
MappaM
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.