通过命令行从 arp 表中删除几个永久条目

通过命令行从 arp 表中删除几个永久条目

我正在尝试从我的 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 系统。

除了命令ifconfigroute和 之外brctl, 也arp属于“过时命令”类别:它使用已弃用的(用于网络)读写控制内核 API 与网络堆栈交互。

较新的命令和工具分别为ip linkip addressip 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

相关内容