$ sudo arp -avn
? (10.10.7.30) at 00:cc:cc:bb:dd:86 [ether] on eth0
...
$ sudo arp --delete 10.10.7.30
$ sudo arp -avn
? (10.10.7.30) at <incomplete> [ether] on eth0
在--delete
我预计没有条目之后10.10.7.30
。出乎意料的是,条目仍然存在并被标记为<incomplete>
。
使用Ubuntu 10.04。
该条目将被删除,请耐心等待。
(如果你想要最短的答案:不完整==删除)
假设“删除”是该操作的错误词。这里真正发生的是条目被手动设置为状态“已发送请求,无应答”(因此“不完整”的 ARP 过程),就好像机器真的无法访问一样。
现在,该条目将很快被完全删除,除非它同时获得新的有效 ARP 响应。在那种情况下,即使条目已被删除而不是被标记为不完整,条目仍将被重新添加。因此,这种行为没有实际的优缺点。
但请记住,我们谈论的是缓存。从缓存中删除内容既困难又昂贵。使条目无效并等待它在最终删除之前被替换会更有效。但是对于系统来说,如果条目从列表中消失或只是标记为不完整,则完全没有区别。
只是为了补充所有其他答案,我发现此链接非常有用。
在某些情况下,使用
ip
更合适,例如命令:结果可能取决于您的 Linux 内核。
除了其他好的答案之外,值得一提的是,可以通过删除它来完全消除 arp 缓存。一种不那么痛苦的方法是:
这应该删除所有条目,无论它们处于何种状态。
替代方法包括关闭和打开接口以及类似的方法来完全删除和重新创建 arp 缓存。
我知道这听起来很明显,但是,对于那些不习惯使用 shell 的人,这是我的建议:
从@KarmaFusebox 的回答开始,为什么不简单地grep 结果...?:
它只会向您显示现有/活动的缓存条目。
我认为它一直是一个POSIX 兼容命令。如果您需要的话,它是一种可编写脚本的方法。