我正在尝试从我的 arp 表中删除永久条目。但以下命令仅删除那些不是永久的
ip -s -s neigh flush all
使用 arp 实用程序,我能够消除永久的。例子:
arp -a
? (192.168.1.230) en d4:63:c6:11:22:33 [ether] PERM in enp2s0
arp -d 192.168.1.230
由于有几个永久条目,我想自动化该命令,以便它删除任何包含“PERM”的条目:
arp -a | grep -i perm | grep -oP '(\d+\.){3}\d+' | xargs -I {} sudo arp -d {}
但它有一个错误:
xargs: sudo: ended with status 255; aborting
我做错了什么?THK
更新:
解决了 bash 排除执行命令的计算机的 ip 地址
localip=192.168.1.11
arp -a | grep -i perm | grep -oP '(\d+\.){3}\d+' | grep -v $localip | xargs -I {} sudo arp -d {}
谢谢大家
您的系统似乎是 Linux 系统。
除了 commands和
ifconfig
之外,它们属于“过时命令”类别:它使用已弃用的(用于网络)ioctl内核 API 与网络堆栈进行交互。route
brctl
arp
较新的命令和工具,分别是
ip link
和ip address
、ip route
和bridge
最后ip neighbour
(替换arp
),是较新的版本,而是使用rtnetlink内核 API。新功能(例如:策略路由ip rule
)通常仅在较新的 API 上可用。可以使用以下命令添加 OP 示例中的永久条目:
有
nud
含义:这些命令系列通常具有更强大的语法,带有一些过滤器,可应用于显示或...批量删除条目。通常当非空过滤器应用于show子命令时(此处:显示永久 ARP 条目):
它将适用于flush子命令:
笔记:
虽然在我的系统
arp
上是/usr/sbin/arp
并且我用它来重写开头/usr/sbin/arp
,但当由具有无限 sudo 权限的用户运行时,您的命令看起来很好。无论如何,如果我正确理解了您的评论,它强调了试图解析主要用于人类阅读的输出是不可靠的。UPDATE1:使用 JSON 输出进行受控解析的示例
jq
最近足够多的 iproute2 命令具有 JSON 输出,如果应用程序或脚本没有更直接的 API 可用,当与JSON 解析命令结合使用时会很有帮助。检索 ARP 表中与本地管理的MAC 地址或 Xen 或 VMware OUI匹配的所有 IP 地址的示例:
UPDATE2:正如评论的那样,如何临时添加一个条目,所以可能是随机的,存在?
条目已存在,无法添加。它可以更改(如果已知该条目存在)或替换(如果存在则更改它,如果不存在则添加它,因此这永远不会回答 EEXIST)。这适用于iproute2系列的许多其他命令。
示例: