¿Alguien puede explicar cómo ping 0
funciona y se traduce a 127.0.0.1
.
[champu@testsrv ]$ ping 0
PING 0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.039 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.013 ms
--- 0 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.013/0.026/0.039/0.013 ms
linux
networking
Rahul Patil
fuente
fuente
Respuestas:
Comportamiento especial (y AFAICT) levemente poco documentado en iputils
ping
: usted mismo hace ping.Si
ping 0
esto es lo que sucede (muy editado y comentado para mayor claridad):inet_aton()
no es POSIX, pero supongo que copia el comportamiento deinet_addr()
cuando se están convirtiendo menos de 4 decimales punteados. En el caso de un número único sin punto, simplemente se almacena en la dirección de red binaria y0x00000000
es equivalente a la forma punteada0.0.0.0
.Puede ver esto si usted
strace
(como root):También puede ver el cambio si se vincula a una interfaz específica :
Mientras que 0 puede ser tratado como 0.0.0.0 y una dirección de difusión en muchos casos, eso claramente no es lo que está haciendo ping . En casos especiales, esto significa "la IP principal de la interfaz en cuestión" (con un manejo adicional para casos de multidifusión / difusión).
RFC 1122 §3.2.1.3 explica el comportamiento: tanto 0.0.0.0 como la dirección IP con la red enmascarada (el "número de host", p. Ej. 0.0.0.1 en el caso de loopback) significan "este host en esta red".
Al menos en el caso de 0 o 0.0.0.0, así es como se
ping
comportan los iputils , otros pings y otros sistemas operativos pueden comportarse de manera diferente. Por ejemplo, FreeBSD hace ping 0.0.0.0 a través de la ruta predeterminada (que no creo que sea un comportamiento "correcto").ping 1
o0.0.0.1
no funciona como se esperaba (no para mí de todos modos, iputils-sss20101006 ).fuente