Quando tento fazer ping no endereço IP, 10.10.208.57
não recebo resposta, pois não existe nada na rede com esse endereço IP.
No entanto, se eu tentar fazer ping10.10.208.
057
em vez disso, outro endereço IP responde:
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
se trata de uma impressora Lexmark E120n, qual poderia ser a origem deste estranho problema?
Responder1
Na verdade, esse comportamento se deve a um recurso normal do ping e não tem relação com o seu hardware real.
Na verdade, prefixar o endereço IP (ou parte dele) com um zero à esquerda fará com que o número seja interpretado comooctal.
Então 057
significa que 57
na base 8 é 47. Assim, o ping enviará oICMPconsultar a máquina localizada no endereço 10.10.208.47
e, portanto, obter uma resposta dela.
Observe que você também pode executar ping em endereços em hexadecimal, 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.
Responder2
O Ping, como muitos outros programas Unix, usa as bibliotecas C do seu sistema Unix para resolução de nomes. Uma das funções utilizadas é inet_aton
.
A página de manual inet_aton
diz:
Todos os números fornecidos como ``partes'' em um `.' a notação pode ser decimal, octal ou hexadecimal, conforme especificado na linguagem C (ou seja, um 0x ou 0X inicial implica hexadecimal; caso contrário, um 0 inicial implica octal; caso contrário, o número é interpretado como decimal).
Portanto, quando você usa um zero à esquerda, o número é interpretado como um octal. Assim, 57 = 047 = 0x39.