当我使用此命令时:
arp -a | grep "192.168.0.19" | awk '{ print $4 }'
我收到了这些结果... ff:ff mac 地址是我想要的,但为什么我得到的是 (incomplete)s 字段?我想要的只是从我要 grep 的特定 IP 获取的 MAC 地址。
ff:ff:ff:ff:ff:ff
(incomplete)
(incomplete)
(incomplete)
(incomplete)
(incomplete)
(incomplete)
(incomplete)
(incomplete)
(incomplete)
(incomplete)
答案1
显然您最近尝试访问192.168.0.190
、192.168.0.191
、… 192.168.0.199
(注意有 10(incomplete)
个)。无法访问这些地址,但内核缓存仍会暂时保留其不完整的条目。
我想如果你这么做了arp -a | grep "192.168.0.19"
你就能自己发现这一点。
我的arp -a
(在 Ubuntu 14.04.5 LTS 上)将 IP 地址放在括号中。尝试:
arp -a | grep "(192.168.0.19)" | awk '{ print $4 }'
或者您可以使用以下选项过滤掉(incomplete)
s :-v
grep
arp -a | grep "192.168.0.19" | grep -v "(incomplete)" | awk '{ print $4 }'
哎呀!后一个版本可能会返回您不期望的主机的 MAC 地址。想想如果192.168.0.19
条目不完整而例如192.168.0.190
条目完整会发生什么。我将其留在这里是为了教育目的。
但grep -v
可能有用(请注意 IP 地址旁边的括号又回来了):
arp -a | grep "(192.168.0.19)" | grep -v "(incomplete)" | awk '{ print $4 }'
这样,您便可以获得所需的 MAC 地址,如果此 IP 没有完整的条目,则无法获得任何内容。
最后我arp
可以仅返回有关特定 IP 的信息: arp -a 192.168.0.19
。这是最好的开始方式。整个命令可能如下所示:
arp -a 192.168.0.19 | grep -v "(incomplete)" | awk '{ print $4 }'
又出错了!到处都是陷阱。如果的主机名192.168.0.19
是这样的,最后一个命令将不会返回任何输出foobar-(incomplete)
。改进版本:
arp -a 192.168.0.19 | awk '{ print $4 }' | grep -v "(incomplete)"