Hacer ping a una dirección IP responde con una IP diferente

21

Cuando trato de hacer ping a la dirección IP 10.10.208.57no tengo respuesta ya que no existe nada en la red con esa dirección IP.

Sin embargo, si trato de hacer ping 10.10.208.0 en su57 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.47es una impresora Lexmark E120n, ¿cuál podría ser el origen de este extraño problema?

PsyStyle
fuente
3
Bump, mira la respuesta en este hilo: superuser.com/questions/486788/…
Michal Sokolowski

Respuestas:

43

Ese comportamiento se debe realmente a una característica normal de ping y no tiene relación con su hardware real.

De hecho, el prefijo de la dirección IP (o parte de ella) con un cero inicial hará que el número se interprete como octal .

Entonces 057significa 57en la base 8, que es 47. Por lo tanto, ping enviará la consulta ICMP a la máquina ubicada en la dirección 10.10.208.47y, por lo tanto, obtendrá una respuesta.

Tenga en cuenta que también puede hacer ping a las direcciones en hexadecimal, utilizando el prefijo 0x en lugar de solo 0.

Editar: como sugieren muchos comentarios, esta característica no es específica pingy puede encontrarse en muchos softwares CLI que manipulan direcciones IP.

eltrai
fuente
Whoa! ¡Gracias! Mi corazón se detuvo por unos minutos :-)
PsyStyle
44
No solo ping. Muchas cosas hacen eso.
Jenny D dice Restablecer a Monica
1
Bash trata a todos los "enteros" como ese askubuntu.com/questions/621500/…
Tim
15

Ping, como muchos otros programas de Unix, utiliza las bibliotecas C en su sistema Unix para la resolución de nombres. Una de las funciones utilizadas es inet_aton.

La página del manual inet_atondice:

Todos los números suministrados 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 usa un cero inicial, el número se interpreta como un octal. Por lo tanto, 57 = 047 = 0x39.

Jenny D dice Reinstate Monica
fuente
Noté que incluso Windows se comporta igual. Gracias por tu respuesta detallada!
PsyStyle
@PsyStyle ¡De nada! Es una notación estándar para números, en un amplio espectro de sistemas operativos y lenguajes de programación.
Jenny D dice Restablecer a Monica
"Entonces, cuando estás usando un cero a la izquierda, el número se interpreta como un decimal". Creo que esto es un error tipográfico, querías interpretarlo como octal ¿verdad?
Cruncher
1
Gracias @Cruncher. Culpo a una concentración demasiado alta de sangre en mi flujo de cafeína.
Jenny D dice Restablecer a Monica