Étrange notation décimale sans point d'adresse IP… Comment ça marche?


89

Un peu plus tôt dans la journée, je pensais avoir une URL dans le presse-papiers, mais quatre de 9 chiffres de 9 chiffres entiers ont été copiés sur une feuille de calcul, c’est-à-dire des numéros d’identification provenant d’un système propriétaire. Complètement sans rapport avec la tâche à accomplir. Je l'ai collé dans Firefox et j'ai été surpris de constater qu'il chargeait réellement une page. J'ai déjà vu des notations décimales sans points d' adresses IPv4 , mais ce nombre long est quelque chose de beaucoup, beaucoup plus grand.

714687644714805209715128610715964400 (collez un HTTP: // devant)

Comment cela marche-t-il? Tous les décimaux -> convertisseurs IPv4 que j'ai trouvés sur Internet considèrent tous cette entrée comme invalide. Si je prends l'adresse IPv4 qu'il charge réellement et que je fais les mêmes calculs pour la convertir en décimale sans points, j'obtiens un nombre considérablement plus petit.

J'ai lu que ping accepte les dwords et effectue certaines conversions, mais il ne peut pas convertir ce nombre en adresse IP. IPv6 est hors de question car cet hôte n'a pas de connectivité IPv6.

Quel genre de folie est-ce? Cela me stresse moi-même et mes collègues.

Edit: Il est de retour en ligne maintenant.



2
Êtes-vous vraiment sûr que ce n'est pas une adresse IPv6? Parce que ce nombre se compose de 8 chiffres en base 65536; Les adresses IPv6 ont 8 chiffres en base 65536. Représentées en hexadécimal, comme il est habituel pour IPv6, il s'agit de 89: a4d2: 471b: 45ef: 77ed: c70f: da35: 93f0.
Christian le

2
@Christian Son explication de la source du numéro jives avec le numéro réel affiché, qui a 36 chiffres (chaque ID est composé de 9 chiffres soit 714xxxxxx ou 715xxxxxx). L'ordinateur n'a même pas IPv6 et le nombre pris comme adresse IPv4 renvoie effectivement une page Web. Les chiffres de ~ 5E33 à ~ 3E38 ont 8 chiffres en base 65536, je pense que c'est juste une coïncidence si ses chutes se situent dans cette plage (plus, tout nombre plus petit serait également une adresse IPv6 valide)
Tim S.

1
@beeks Ok, ça ne fonctionnait pas déjà quand je l'ai essayé hier, mais vu que c'était un routeur non sécurisé, ce n'est peut-être pas si surprenant. Alors, dites-vous que vous avez essentiellement mis un nombre aléatoire dans votre barre d'adresse? Ou quel type de feuille de calcul avez-vous là-bas qui contient les adresses IP étrangement codées des routeurs non sécurisés? ;)
Christian

1
@Christian, LOL. C'étaient des identificateurs de message uniques dans un système de conformité. Totalement chance que je les ai collés dans la barre d'adresse, et cela a fonctionné. Je parie que cela ne m'arrivera plus jamais dans ma vie :)
2014

Réponses:


93

C'est une question assez intéressante et il m'a fallu un peu de temps pour le comprendre. La réponse courte est que les 32 derniers bits du nombre sont 3660944368 (en décimal, ce qui peut être trouvé par 714687644714805209715128610715964400 mod 2^32)

Il s'agit de la valeur décimale de l'adresse IPv4 218.53.147.240 , qui peut être trouvée en la convertissant en base 256 de 3660944368 = 218*(256^3)+53*(256^2)+147*(256)+240manière analogue à l'écriture d'un nombre en décimal (base 10). Par exemple 234 = 2*10^2+ 3*10 + 4.

Comme @chritohnide le souligne, chaque section d'adresses IPv4 en pointillés s'appelle un octet car elle représente 8 chiffres binaires. Il convient également de noter que les différents formats d'adresses IPv4 (tels que la décimale en pointillés ou la décimale pure) ne sont que des façons différentes de représenter le nombre binaire 32 bits pour en tirer un avantage.

Les adresses IPv4 étant des nombres de 32 bits, seuls les derniers 32 bits du numéro sont utilisés pour résoudre l'adresse. Pourquoi c'est vrai n'est pas aussi évident. Comme d'autres l'ont fait remarquer, le nombre entier est étonnamment similaire à une adresse IPv6 en décimal, mais ce n'est pas une adresse valide.

En regardant la spécification Teredo (voir 4. Adresses Teredo ), le client IPv4 occupe les 32 derniers bits de l'adresse IPv6, mais le préfixe du nombre ne correspond pas à la spécification Teredo (voir également wikipedia ).


12
Bonne réponse. Il peut également être utile de mentionner que chaque partie d’une adresse IPv4 en pointillés est appelée un octet car il s’agit de la représentation décimale d’un nombre binaire de 8 bits (4 octets = 4 x 8 bits = de 32 bits d’adresse IPv4) et que la valeur décimale la version est vraiment seulement pour notre avantage.
Chritohnide

4
Vous êtes sûr que ce n'est pas une notation décimale IPv6? Il se convertit avec succès à0089:a4d2:471b:45ef:77ed:c70f:da35:93f0
Izkata

5
@ Izkata: Peu probable, car cette adresse se trouverait dans une partie non allouée et réservée de l'espace d'adressage IPv6.
Henning Makholm

3
Le nombre (en ASCII) sera probablement simplement exécuté par l’une des chaînes C stdlib en fonctions int pour être converti en adresse ipv4 32 bits. Dans la plupart des implémentations de C stdlib, ces conversions font automatiquement un modulo 2 ^ <taille d’entier souhaitée>. Le résultat dans ce cas est exactement au comportement observé.
Tonny

3
Il est à noter que ceci est probablement une bizarrerie de l'analyseur URL de Firefox. Il semble reconnaître qu'il s'agit d'un nombre plutôt que d'une URL et tente de l'analyser en tant qu'adresse IP 32 bits non numérotée (l'entier analysé résultant se termine en modulo 32 bits et il ne vérifie pas vraiment les erreurs d'entrée ) Chrome, par exemple, ne montre pas ce comportement. Cela vaut peut-être la peine de le signaler comme un bogue trivial dans Firefox.
Jason C
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.