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