quelqu'un peut-il expliquer comment cela ping 0
fonctionne et cela se traduit par 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
la source
la source
Réponses:
Comportement spécial (et AFAICT) légèrement sous-documenté dans iputils
ping
: vous vous cinglez .Si c'est
ping 0
ce qui se passe (fortement édité et commenté pour plus de clarté):inet_aton()
n'est pas POSIX, mais je suppose qu'il copie le comportementinet_addr()
lorsque moins de 4 décimales en pointillé sont converties. Dans le cas d'un nombre unique sans point, il est simplement stocké dans l'adresse réseau binaire et0x00000000
équivaut à la forme en pointillés0.0.0.0
.Vous pouvez le voir si vous
strace
(en tant que root):Vous pouvez également voir le changement si vous vous connectez à une interface spécifique à la place:
Alors que 0 peut être traité comme 0.0.0.0 et une adresse de diffusion dans de nombreux cas, ce n'est clairement pas ce que fait ping . Cela signifie dans certains cas "l'adresse IP principale de l'interface en question" (avec un traitement supplémentaire pour les cas de multidiffusion / diffusion).
La RFC 1122 §3.2.1.3 explique le comportement: à la fois 0.0.0.0 et l'adresse IP avec le réseau masqué (le "numéro d'hôte", par exemple 0.0.0.1 dans le cas du bouclage) signifient "cet hôte sur ce réseau".
Au moins dans le cas de 0 ou 0.0.0.0, c'est ainsi que
ping
se comporte iputils , d'autres pings et autres OS peuvent se comporter différemment. Par exemple, FreeBSD envoie une requête 0.0.0.0 via la route par défaut (ce qui, à mon avis, n'est pas un comportement "correct").ping 1
ou0.0.0.1
ne fonctionnent pas comme prévu (pas pour moi de toute façon, iputils-sss20101006 ).la source