Очевидно, вы недавно пытались получить доступ к 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)"