Quando tento executar ping no endereço IP, 10.10.208.57
não tenho resposta, pois não existe nada na rede com esse endereço IP.
No entanto, se eu tentar executar ping 10.10.208.
0,57
outro endereço IP responderá:
root@everest:/root# ping 10.10.208.057
PING 10.10.208.057 (10.10.208.47) 56(84) bytes of data.
64 bytes from 10.10.208.47: icmp_seq=1 ttl=253 time=0.732 ms
64 bytes from 10.10.208.47: icmp_seq=2 ttl=253 time=0.695 ms
64 bytes from 10.10.208.47: icmp_seq=3 ttl=253 time=0.659 ms
64 bytes from 10.10.208.47: icmp_seq=4 ttl=253 time=0.705 ms
Considerando que 10.10.208.47
é uma impressora Lexmark E120n, qual poderia ser a origem desse problema estranho?
Respostas:
Na verdade, esse comportamento é devido a um recurso normal do ping e não tem relação com o hardware real.
De fato, prefixar o endereço IP (ou parte dele) com um zero à esquerda fará com que o número seja interpretado como octal .
O que
057
significa57
na base 8, que é 47. Assim, o ping envia a consulta ICMP para a máquina localizada no endereço10.10.208.47
e, portanto, obtém uma resposta.Observe que você também pode executar ping em endereços hexadecimais, usando o prefixo 0x em vez de apenas 0.
Editar: Como muitos comentários sugerem, esse recurso não é específico
ping
e pode ser encontrado em muitos softwares CLI que manipulam endereços IP.fonte
O Ping, como muitos outros programas unix, usa as bibliotecas C no seu sistema unix para resolução de nomes. Uma das funções usadas é
inet_aton
.A página do manual
inet_aton
diz:Portanto, quando você está usando um zero à esquerda, o número é interpretado como um octal. Assim, 57 = 047 = 0x39.
fonte