Aparentemente, você tentou recentemente acessar 192.168.0.190
, 192.168.0.191
,… 192.168.0.199
(observe que há 10 (incomplete)
s). Esses endereços não puderam ser alcançados, mas o cache do kernel ainda mantém suas entradas incompletas por um tempo.
Eu acho que se você tivesse arp -a | grep "192.168.0.19"
você poderia descobrir isso sozinho.
Meu arp -a
(no Ubuntu 14.04.5 LTS) coloca os endereços IP entre parênteses. Experimente:
arp -a | grep "(192.168.0.19)" | awk '{ print $4 }'
Ou você pode filtrar a opção (incomplete)
s com -v
de grep
:
arp -a | grep "192.168.0.19" | grep -v "(incomplete)" | awk '{ print $4 }'
Oops! A última versão pode retornar endereços MAC de hosts que você não espera. Pense no que acontecerá se 192.168.0.19
tiver entrada incompleta e, por exemplo, 192.168.0.190
tem um completo. Deixo aqui para fins educacionais.
Ainda, grep -v
pode ser útil (observe que os parênteses próximos ao endereço IP estão de volta):
arp -a | grep "(192.168.0.19)" | grep -v "(incomplete)" | awk '{ print $4 }'
Dessa forma, você obtém o endereço MAC desejado ou nada, se não houver uma entrada completa para este IP.
Finalmente, meu arp
pode retornar informações sobre somente IPs específicos: arp -a 192.168.0.19
. Esta é a melhor maneira de começar. O comando inteiro pode ser assim:
arp -a 192.168.0.19 | grep -v "(incomplete)" | awk '{ print $4 }'
Opa novamente! Armadilhas por toda parte. Este último comando não retornará nenhuma saída se o nome do host de 192.168.0.19
for igual a foobar-(incomplete)
. Versão melhorada:
arp -a 192.168.0.19 | awk '{ print $4 }' | grep -v "(incomplete)"