alguém pode explicar como ping 0
funciona e traduzir para 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
fonte
fonte
Respostas:
Comportamento especial (e AFAICT) ligeiramente sub-documentado no iputils
ping
: você faz ping em si mesmo.Se você
ping 0
é o que acontece (muito editado e comentado para maior clareza):inet_aton()
não é POSIX, mas estou assumindo que ele copia o comportamento deinet_addr()
quando menos de quatro casas decimais estão sendo convertidas. No caso de um número único sem ponto, ele é simplesmente armazenado no endereço de rede binário e0x00000000
é equivalente à forma pontilhada0.0.0.0
.Você pode ver isso se você
strace
(como root):Você também pode ver a alteração se ligar a uma interface específica :
Embora 0 possa ser tratado como 0.0.0.0 e um endereço de broadcast em muitos casos , claramente não é isso que o ping está fazendo . Em casos especiais, isso significa "o IP primário da interface em questão" (com um tratamento extra para casos de difusão seletiva / difusão).
A RFC 1122 §3.2.1.3 explica o comportamento: 0.0.0.0 e o endereço IP com a rede mascarada (o "número do host", por exemplo, 0.0.0.1 no caso de loopback) significa "este host nesta rede".
Pelo menos no caso de 0 ou 0.0.0.0, é assim que o iputils
ping
se comporta, outros pings e outros sistemas operacionais podem se comportar de maneira diferente. Por exemplo, o FreeBSD pings 0.0.0.0 através da rota padrão (que eu não acho que seja um comportamento "correto").ping 1
ou0.0.0.1
não funciona como esperado (não para mim, iputils-sss20101006 ).fonte