web-dev-qa-db-fra.com

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

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 à partir d’un tableur, 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 un ping peut accepter des dwords et effectuer des 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.

89
beeks

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, que l'on peut trouver 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 3660944368 = 218*(256^3)+53*(256^2)+147*(256)+240, 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 est également intéressant 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 le meilleur parti.

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 déjà 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 numéro ne correspond pas à la spécification Teredo (voir aussi wikipedia ).

93
peanut_butter