Je tort manqué le point hors d'une adresse IP et tapé 192.168.072
.
À ma grande surprise je me suis connecté à une machine à192.168.0.58
Si je cingle, 192.168.072
je reçois des réponses de 192.168.0.58
.
Pourquoi est-ce?
Je suis sur un PC Windows sur un domaine Windows.
Si je cingle, 192.168.72
je reçois une réponse 192.168.0.72
, il semble donc que le 0
in 072
(dans mon erreur initiale) est significatif.
Cette question était une question de super utilisateur de la semaine .
Lisez l' entrée du blog pour plus de détails ou contribuez vous-même au blog
ip
ping
ip-address
George Duckett
la source
la source
ping 192.168.072
impressionsPING 192.168.072 (192.168.0.58) 56(84) bytes of data.
[...].192.168.0.58
pour obtenir une réponse. Quelles sont les chances de cela?192.168.0.58
est-ce que le chronométrage est terminé pour moi .. est-ce que toutes les demandes de ping peuvent avoir assommé le serveur?Réponses:
Tout le monde complique à l'excès avec les RFC, les classes IP, etc. Exécutez simplement quelques tests pour voir comment la
ping
commande analyse l'adresse IP entrée par l'utilisateur (paillettes superflues supprimées):Comme vous pouvez le voir, la
ping
commande (sous Windows) vous permet d'utiliser différents formats d'adresse IP. Une adresse IPv4 peut être décomposé en quatre parties ( « en pointillés-quad ») comme ceci:A.B.C.D
et laping
commande vous permet de laisser quelques - uns, remplissant un défaut de la0
manière suivante:Si vous ne fournissez qu'une seule partie, si elle est inférieure à 255 (le maximum pour un octet), elle est traitée comme un octet comme ci-dessus, mais si elle est supérieure à 255, elle est convertie et transférée dans le champ suivant. (c.-à
mod 256
-d.)Il existe quelques cas extrêmes tels que fournir plus de quatre parties ne semble pas fonctionner (par exemple,
google.com
l'adresse IP de ping ne fonctionnera pas pour l'un0.74.125.226.4
ou l' autre74.125.226.4.0
).Vous pouvez également utiliser la notation hexadécimale à la fois en pointillé et quadruple, mais vous devez la formater en pré-en attente
0x
pour chaque octet.Il existe donc de nombreuses façons de représenter une adresse IP (IPv4). Vous pouvez utiliser le format plat ou quadruple pointillé (ou triple pointillé, double pointillé ou même simple pointé) et vous pouvez utiliser (ou même mélanger et assortir) décimal, octal et hexadécimal pour chaque format. Par exemple, vous pouvez faire un ping
google.com
des manières suivantes:google.com
(nom de domaine)74.125.226.4
(point décimal)1249763844
(décimal plat)0112.0175.0342.0004
(octal pointillé)011237361004
(octal plat)0x4A.0x7D.0xE2.0x04
(hex en pointillé)0x4A7DE204
(hexagone plat)74.0175.0xe2.4
(_ಠ)(Dieu merci, le support de la notation binaire n'a pas été ajouté!)
Application :
Dans votre cas, le ping
192.168.072
utilise le troisième format du tableau ci-dessus (A.B.0.C
), vous êtes donc en train de faire un ping192.168.0.072
. De plus, comme vous avez un zéro non significatif sur la dernière partie, elle est traitée comme une valeur octale, ce qui en décimal est 58.Mystère résolu.
Notez que si la
ping
commande Windows autorise une telle variété de formats pour l’entrée et interprète les formats non standard de la manière décrite, cela ne signifie pas nécessairement que vous pouvez utiliser ces formats partout. Certains programmes peuvent vous obliger à fournir les quatre parties d’un quad pointillé, d’autres ne permettent pas de mélanger et d’apparier décimal et octal, et ainsi de suite.De plus, les adresses IPv6 compliquent davantage la logique d'analyse et l'acceptabilité du format d'entrée.
Addenda :
syss a souligné que si vous utilisez un caractère non valide dans l'un des nombres (par exemple, un
8
ou9
lorsque vous utilisez octal, ung
en mode hexadécimal, etc.), alors vous êtesping
suffisamment intelligent pour le reconnaître et l'interpréter comme une chaîne (-al? -ic?) URL au lieu d’adresse IP numérique.(En tant que personne qui a eu de nombreux anévrismes et crises cardiaques en essayant d’écrire du code soi-disant «simple» pour tenir compte du nombre en expansion exponentielle de permutations de valeurs de données, j’apprécie qu’il - semble sembler - traiter correctement toutes les variations d’entrée; cas, au moins 3 1 +3 2 +3 3 +3 4 = 120 variations)
Ainsi, tout en spécifiant que
010.020.030.040
ping sera8.16.24.32
comme prévu, le passage010.020.030.080
àping
sera traité comme une URL plutôt que comme une adresse IP - commefoo.bar.baz.com
ce qui pourrait (mais n'existe malheureusement pas). En d'autres termes, il essaie d'envoyer une requête ping au sous-domaine010
du sous020
-domaine du domaine du domaine030
de premier niveau080
. Cependant, étant donné que ce080
n’est pas un TLD valide (comme.com
,.net
et leurs copains), la connexion échoue dès la première étape.La même chose se produit
090.010.010.010
lorsque le caractère non valide se trouve dans un octet différent. De même,0xf.0xf.0xf.0xf
pings15.15.15.15
, mais0xh1.0x1.0xg0.0f
échoue.Oh bien, je suppose que c'est ce que vous obtenez parce que vous ne parlez pas couramment plusieurs bases de nombres.
Il est probablement plus facile et plus sûr de vous assurer de toujours utiliser des adresses à 4 points («40q»? «Quaddy-quad»? «Cutie-q»?).
Alors avancez et apprenez quelques bases numériques . Vous pourrez montrer et être la vie de fêtes, et comme on dit, il y a 10 types de personnes: celles qui connaissent le binaire et celles qui ne le connaissent pas.
Ne pensons même pas aux adresses IPv6; Je pense qu'ils sont l'un des 111 phoques !!!
la source
inet_aton()
) de la documentation sont plus simples sur un point: pas de condition pour "moins / plus de 255".ping
commande (du moins sous Windows) ressemble à la plupart des programmes de Microsoft (notamment le fameux IE). Il essaie d'être trop indulgent et prend tout ce que vous lui lancez et essaie de l'interpréter. Oui, il existe un document officiel sur les formats d’adresse IP, mais il ne s’agit pas d’une question d’ISO ou de RFC, c’est pratique, j’ai fait quelque chose et c’est une question étrange à laquelle on peut répondre sans avoir recours à spécifications techniques) - bien qu’il soit bon de les relier au cas où le PO voudrait les lire.chmod
. C'est ça. C'est la seule exception autorisée pour octal. Période.C:\>ping 0xffffcc
Pinging 0.255.255.204 with 32 bytes of data:
Il y a deux raisons à cela:
Premièrement, un préfixe «0» indique un nombre octal . Depuis oct (072) = déc (58), 192.168.072 = 192.168.58.
Deuxièmement, l'avant-dernier 0 peut être supprimé des adresses IP en abrégé . 127.0.1 est interprété comme 127.0.0.1 et, dans votre cas, 192.168.58 est interprété comme 192.168.0.58.
la source
Outre le point important de @ neu242 sur la notation octale et l'observation selon laquelle les adresses IP peuvent être raccourcies, l'autre élément essentiel consiste à savoir comment les adresses IP réduites sont interprétées.
On pourrait nier que si l’un des quatre nombres manque, l’analyseur ajoute des octets remplis de zéros à la fin (ou au début) de la séquence d’octets. Mais cela ne correspond pas au comportement signalé par le PO: 192.168.072 a été analysé comme 192.168. 0, 58, pas 192.168.58. 0 , ni 0 .192.168.58.
Apparemment, Windows et Linux ping (la version que vous avez essayée et celles que j'ai essayées) utilisent quelque chose d'équivalent à inet_aton () pour analyser l'argument d'adresse IP. La page de manuel de inet_aton () dit:
Donc,
192.168.072
voilà ... correspond au modèle abc, donc072
(après l'analyse sous forme d'un nombre octal) a été interprété comme une valeur de 16 bits qui définit les 2 octets les plus à droite de l'adresse binaire, équivalents à0.58
.Les règles ci-dessus équivalent à dire que si l'un des quatre nombres est manquant, les octets remplis à zéro nécessaires sont ajoutés immédiatement avant le dernier numéro donné ... ni à la fin ni au début de la chaîne d'octets. (En l'exprimant de cette façon, cela fonctionne si le dernier nombre donné est inférieur à 256.)
Notez que les versions les plus récentes de ping peuvent ne pas autoriser ce type de raccourci, ni l'interprétation octale. Le code source 2010 pour iputils (y compris le ping) que j'ai trouvé utilise inet_pton () plutôt que inet_aton () pour analyser l'argument d'adresse IP. La page de manuel de inet_pton () dit:
la source
inet_addr
Winsock.Vous devez également tenir compte du fait qu'une adresse IP peut être représentée par des entiers additionnés de manière significative pour leur position.
Voici la chose cool:
192.168.58 sera 192.168.0.58 car
192.11010106 sera également 192.168.0.58 car
3232235578 sera également 192.168.0.58 car
la source
1.2.3.
une erreur est générée, car l'analyseur ne peut pas trouver le dernier nombre à ajouter au total.