Cuando intento hacer ping a la dirección IP 10.10.208.57
no obtengo respuesta ya que no existe nada en la red con esa dirección IP.
Sin embargo, si intento hacer ping10.10.208.
057
en su lugar otra dirección 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
Teniendo en cuenta que 10.10.208.47
es una impresora Lexmark E120n ¿cuál podría ser el origen de este extraño problema?
Respuesta1
En realidad, ese comportamiento se debe a una característica normal del ping y no tiene relación con su hardware real.
De hecho, anteponer la dirección IP (o parte de ella) con un cero a la izquierda hará que el número se interprete comooctal.
Entonces 057
significa 57
en base 8 que es 47. Por lo tanto, ping enviará elICMPrealizar una consulta a la máquina ubicada en la dirección 10.10.208.47
y así obtener una respuesta de la misma.
Tenga en cuenta que también puede hacer ping a direcciones en hexadecimal, utilizando el prefijo 0x en lugar de solo 0.
Editar: Como sugieren muchos comentarios, esta característica en realidad no es específica ping
y se puede encontrar en muchos softwares CLI que manipulan direcciones IP.
Respuesta2
Ping, como muchos otros programas Unix, utiliza las bibliotecas C de su sistema Unix para la resolución de nombres. Una de las funciones utilizadas es inet_aton
.
La página de manual para inet_aton
dice:
Todos los números proporcionados como "partes" en un "." La notación puede ser decimal, octal o hexadecimal, como se especifica en el lenguaje C (es decir, un 0x o 0X inicial implica hexadecimal; de lo contrario, un 0 inicial implica octal; de lo contrario, el número se interpreta como decimal).
Entonces, cuando usas un cero a la izquierda, el número se interpreta como un octal. Por tanto, 57 = 047 = 0x39.