Le ping d'une adresse IP répond avec une IP différente


21

Lorsque j'essaie d'envoyer une requête ping à l'adresse IP, 10.10.208.57je n'ai aucune réponse car il n'existe rien dans le réseau avec cette adresse IP.

Cependant, si j'essaie de cingler 10.10.208.0 à la57 place, une autre adresse IP répond:

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

Étant donné qu'il 10.10.208.47s'agit d'une imprimante Lexmark E120n, quelle pourrait être l'origine de cet étrange problème?


3
Bump, regardez la réponse dans ce fil: superuser.com/questions/486788/…
Michal Sokolowski

Réponses:


43

Ce comportement est en fait dû à une fonctionnalité normale de ping et n'a aucun rapport avec votre matériel réel.

En effet, le préfixe de l'adresse IP (ou d'une partie de celle-ci) par un zéro de tête entraînera l'interprétation du nombre comme octal .

Donc, 057signifie 57en base 8 qui est 47. Ainsi, ping enverra la requête ICMP à la machine située à l'adresse 10.10.208.47et obtiendra donc une réponse de celle-ci.

Notez que vous pouvez également envoyer une requête ping aux adresses en hexadécimal, en utilisant le préfixe 0x au lieu de seulement 0.

Modifier: comme le suggèrent de nombreux commentaires, cette fonctionnalité n'est en fait pas spécifique à pinget peut être trouvée dans de nombreux logiciels CLI manipulant des adresses IP.


Whoa! Merci! Mon cœur s'est arrêté pendant quelques minutes :-)
PsyStyle

4
Pas seulement un ping. Beaucoup de choses font ça.
Jenny D dit Réintégrer Monica

1
Bash traite tous les "entiers" comme ça askubuntu.com/questions/621500/…
Tim

15

Ping, comme de nombreux autres programmes Unix, utilise les bibliothèques C de votre système Unix pour la résolution de noms. L'une des fonctions utilisées est inet_aton.

La page de manuel de inet_atondit:

Tous les numéros fournis en tant que `` pièces '' dans un `. ' la notation peut être décimale, octale ou hexadécimale, comme spécifié dans le langage C (c.-à-d., un 0x ou 0X en tête implique hexadécimal; sinon, un 0 en tête implique octal; sinon, le nombre est interprété comme décimal).

Ainsi, lorsque vous utilisez un zéro non significatif, le nombre est interprété comme un octal. Ainsi, 57 = 047 = 0x39.


J'ai remarqué que même Windows se comporte de la même manière. Merci pour votre réponse détaillée!
PsyStyle

@PsyStyle Vous êtes les bienvenus! Il s'agit d'une notation standard pour les nombres, sur un large éventail de systèmes d'exploitation et de langages de programmation.
Jenny D dit Réintégrer Monica

"Donc, lorsque vous utilisez un zéro non significatif, le nombre est interprété comme une décimale.". Je pense que c'est une faute de frappe, vous vouliez dire interprété comme octal non?
Cruncher

1
Merci @Cruncher. Je blâme une concentration trop élevée de sang dans mon flux de caféine.
Jenny D dit Réintégrer Monica
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.