我正在尝试从我的 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
我做错了什么?谢谢
更新:
解决了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 {}
谢谢大家
答案1
您的系统似乎是 Linux 系统。
除了命令ifconfig
、route
和 之外brctl
, 也arp
属于“过时命令”类别:它使用已弃用的(用于网络)读写控制内核 API 与网络堆栈交互。
较新的命令和工具分别为ip link
和ip address
,ip route
以及bridge
最后ip neighbour
(替换arp
),是较新的版本,使用rtnetlink内核 API。新功能(例如:策略路由ip rule
)通常仅在较新的 API 上可用。
OP 示例中的永久条目可以通过以下命令添加:
ip neighbour add 192.168.1.230 lladdr d4:63:c6:11:22:33 nud permanent dev enp2s0
含义nud
:
nud STATE
邻居条目的状态。nud 是“邻居不可达性检测”的缩写。状态可以采用以下值之一:
permanent
邻居条目永远有效,并且只能通过管理方式删除。
[...]
这些命令系列通常具有更强大的语法,并带有一些可用于显示或批量删除条目的过滤器。通常,当非空过滤器应用于展示子命令(此处:显示永久 ARP 条目):
# ip neighbour show nud permanent
192.168.1.230 dev enp2s0 lladdr d4:63:c6:11:22:33 PERMANENT
它将适用于冲洗子命令:
# ip neighbour flush nud permanent
# ip neighbour show nud permanent
#
笔记:
虽然在我的系统上arp
是/usr/sbin/arp
,并且我用这个来重写开头/usr/sbin/arp
,但当由具有无限 sudo 权限的用户运行时,您的命令看起来不错。无论如何,如果我正确理解了您的评论,它强调了尝试解析主要用于人类阅读的输出是不可靠的。
UPDATE1:使用 JSON 输出进行受控解析的示例
最近的 iproute2 命令有一个 JSON 输出,当与jq
如果应用程序或脚本没有更直接的 API 可用,JSON 解析命令可以提供很大帮助。
示例检索 ARP 表中与以下项匹配的所有 IP 地址本地管理MAC 地址或 Xen 或 VMware OUI:
# ip -json neighbour | jq -r '.[] | if .lladdr != null and ( .lladdr | test("^(.[26ae]|00:16:3e|00:05:69|00:0c:29|00:1c:14|00:50:56)","xi") ) then .dst else empty end'
UPDATE2:正如评论的那样,如何添加已经临时存在的、因此可能是随机存在的条目?
条目已存在,无法添加。可以已更改(如果已知该条目存在)或被取代(如果存在则更改,如果不存在则添加,因此这永远不会回答 EEXIST)。这适用于许多其他命令iproute2家庭。
例如:
# ping 192.168.1.231
PING 192.168.1.231 (192.168.1.231) 56(84) bytes of data.
From 192.168.1.2 icmp_seq=1 Destination Host Unreachable
[...]
# ip neigh show nud failed
192.168.1.231 dev enp2s0 FAILED
# ip neigh add 192.168.1.231 lladdr 12:34:56:78:ab:cd nud permanent dev enp2s0
RTNETLINK answers: File exists
# ip neigh replace 192.168.1.231 lladdr 12:34:56:78:ab:cd nud permanent dev enp2s0
# ip neigh show nud permanent
192.168.1.231 dev enp2s0 lladdr 12:34:56:78:ab:cd PERMANENT