Ping de um endereço IP responde com IP diferente

21

Quando tento executar o ping no endereço IP 10.10.208.57 , não tenho resposta, pois nada existe na rede com esse endereço IP.

No entanto, se eu tentar efetuar ping de 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?

    
por PsyStyle 19.05.2015 / 13:40

2 respostas

43

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 .

Portanto, 057 significa 57 na base 8, que é 47. Assim, o ping enviará a consulta ICMP para a máquina localizada no endereço 10.10.208.47 e, portanto, obter uma resposta dele.

Note que você também pode pingar endereços em hexadecimal, usando o prefixo 0x em vez de apenas 0.

Edit: Como muitos comentários sugerem, esse recurso não é específico de ping e pode ser encontrado em muitos softwares de CLI que manipulam endereços IP.

    
por 19.05.2015 / 13:48
15

Ping, como muitos outros programas unix, usa as bibliotecas C em seu sistema unix para resolução de nomes. Uma das funções usadas é inet_aton .

A página man de inet_aton diz:

All numbers supplied as ''parts'' in a '.' notation may be decimal, octal, or hexadecimal, as specified in the C language (i.e., a leading 0x or 0X implies hexadecimal; otherwise, a leading 0 implies octal; otherwise, the number is interpreted as decimal).

Então, quando você está usando um zero inicial, o número é interpretado como octal. Assim, 57 = 047 = 0x39.

    
por 19.05.2015 / 14:01