在 linux 中恢复 arp 缓存

Restore arp cache in linux

我使用下面的命令不小心删除了 HWaddress

arp -d 200.9.12.50

if i 运行 arp -n 200.9.12.50 显示 不完整

Address                  HWtype  HWaddress           Flags Mask            Iface
200.9.12.50                       (incomplete)                              eth0

我知道确切的 HW 地址,尝试使用以下命令手动添加。我无法 ping(目标主机无法访问),如果我重新启动,arp 将再次设置为 incomplete。请帮我用 HWaddress 恢复 arp。

arp -s 200.9.12.50 00:0b:ab:7d:09:4a temp

linux 内核仅在邻居不可达检测 (nud) 状态设置为永久(非临时)或 "valid" (arp.c#L1077-L1085) 时设置完成的 arp 标志。

#define NUD_VALID   (NUD_PERMANENT|NUD_NOARP|NUD_REACHABLE|NUD_PROBE|NUD_STALE|NUD_DELAY)

net/neighbour.h#L38


查看 net-tools arp.c,这是在 arp_set(). (See net-tools 中设置的官方来源。)如果提供了 temp arg,永久标志将被禁用,这可能解释了 "If i reboot the arp will be again set to incomplete."


尝试删除条目并在没有临时文件的情况下将其重置:

# arp -i eth0 -d 200.9.12.50
# arp -Ds 200.9.12.50 eth0

(我使用的是 iproute2 而不是 net-tools,如有不妥请见谅。)