O ping de um endereço IP responde com IP diferente

21

Quando tento executar ping no endereço IP, 10.10.208.57nã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?

PsyStyle
fonte
3
Bump, veja a resposta neste tópico: superuser.com/questions/486788/…
Michal Sokolowski

Respostas:

43

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 057significa 57na base 8, que é 47. Assim, o ping envia a consulta ICMP para a máquina localizada no endereço 10.10.208.47e, 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 pinge pode ser encontrado em muitos softwares CLI que manipulam endereços IP.

eltrai
fonte
Uau! Obrigado! Meu coração parou por alguns minutos :-)
PsyStyle
4
Não apenas ping. Muitas coisas fazem isso.
Jenny D diz Reinstate Monica
1
Bash trata todos os "inteiros" assim askubuntu.com/questions/621500/...
Tim
15

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_atondiz:

Todos os números fornecidos como `` peças '' em um `. ' a notação pode ser decimal, octal ou hexadecimal, conforme especificado no idioma 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ê está usando um zero à esquerda, o número é interpretado como um octal. Assim, 57 = 047 = 0x39.

Jenny D diz Restabelecer Monica
fonte
Notei que até o Windows se comporta da mesma maneira. Obrigado pela sua resposta detalhada!
PsyStyle 19/05
@PsyStyle De nada! É uma notação padrão para números, em um amplo espectro de sistemas operacionais e linguagens de programação.
Jenny D diz Restabelecer Monica
"Então, quando você está usando um zero à esquerda, o número é interpretado como um decimal." Eu acho que isso é um erro de digitação, você quis dizer interpretado como octal, certo?
Cruncher
1
Obrigado @Cruncher. Eu culpo uma concentração muito alta de sangue no meu fluxo de cafeína.
Jenny D diz Reinstate Monica