arp
está interrogando seu sistema para determinar como ele pode converter IP's em nomes de host. Se você usar a opção -n
, ela renunciará a isso e simplesmente mostrará os IPs sem nenhuma tradução para nomes de host.
Como a maioria das ferramentas no Linux, arp
usa o NS (Name Service Switch) para fazer as pesquisas. Se você usar o comando strace
your arp
, poderá ver tudo isso:
$ strace -s 2000 arp -a
...
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 5
Depois de procurar neste arquivo, arp
descobrirá como é suposto procurar nomes de host.
$ grep hosts: /etc/nsswitch.conf
#hosts: db files nisplus nis dns
hosts: files dns myhostname
Isso diz para procurar nos arquivos 1st, depois perguntar ao DNS 2nd ... A palavra files
aqui significa usar o arquivo /etc/hosts
do sistema. Você pode saber como o NS faria isso usando o comando getent hosts
.
Exemplo
Na minha VM do CentOS 7, por exemplo:
$ arp -a
? (10.0.2.3) at 52:54:00:12:35:03 [ether] on eth0
gateway (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0
$ arp -an
? (10.0.2.3) at 52:54:00:12:35:03 [ether] on eth0
? (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0
Se perguntarmos a getent
procurando pelo IP 10.0.2.2:
$ getent hosts 10.0.2.2
10.0.2.2 gateway
Os IPs, se não estiverem presentes localmente em qualquer arquivo, serão procurados no DNS a seguir. Como meus IPs são todos IPs privados para essa VM, e eles não estão explicitamente no DNS definido da minha VM, que é incidentalmente definido aqui:
$ more /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.2.3
OBSERVAÇÃO: arp
não tem outra opção senão mostrar um ponto de interrogação, porque não encontrou nenhum nome para usar.