Seltsame punktlose Dezimalschreibweise der IP-Adresse… Wie funktioniert das?

89

Früher dachte ich heute, ich hätte eine URL in meiner Zwischenablage, aber ich hatte tatsächlich vier 9-stellige Ganzzahlen, die von einer Tabelle kopiert wurden, die Identifikationsnummern eines proprietären Systems waren. Völlig unabhängig von der anstehenden Aufgabe. Ich habe es in Firefox eingefügt und war überrascht, dass es tatsächlich eine Seite geladen hat. Ich habe schon früher punktlose Dezimalnotationen von IPv4- Adressen gesehen, aber diese lange Zahl ist viel, viel größer.

714687644714805209715128610715964400 (HTTP: // voranstellen)

Wie funktioniert das? Alle im Internet gefundenen IPv4-Konverter für dezimal -> gelten als ungültige Eingabe. Wenn ich die tatsächlich geladene IPv4-Adresse nehme und dieselben Berechnungen durchführe, um sie in eine punktlose Dezimalzahl umzuwandeln, erhalte ich eine erheblich kleinere Zahl.

Ich habe gelesen, dass Ping Dwords akzeptieren und einige Konvertierungen durchführen kann, aber diese Nummer nicht in eine IP-Adresse konvertieren kann. IPv6 kommt nicht in Frage, da dieser Host keine IPv6-Konnektivität besitzt.

Was für ein Wahnsinn ist das? Es ist mir und meinen Mitarbeitern verblüfft.

Bearbeiten: Es ist wieder online.

Beeks
quelle
4
Siehe pc-help.org/obscure.htm
Shamtam
2
Sind Sie wirklich sicher, dass es sich nicht um eine IPv6-Adresse handelt? Weil diese Zahl in der Basis 65536 auf 8 Stellen heruntergebrochen ist; IPv6-Adressen haben 8 Stellen in der Basis 65536. In hexadezimaler Schreibweise wie bei IPv6 üblich: 89: a4d2: 471b: 45ef: 77ed: c70f: da35: 93f0.
Christian
2
@Christian Seine Erklärung für die Quelle der Nummer ist die tatsächlich angezeigte Nummer mit 36 ​​Ziffern (jede ID besteht aus 9 Ziffern, entweder 714xxxxxx oder 715xxxxxx). Der Computer verfügt nicht einmal über IPv6, und die als IPv4-Adresse verwendete Nummer gibt tatsächlich eine Webseite zurück. Zahlen von ~ 5E33 bis ~ 3E38 haben 8 Stellen in der Basis 65536. Ich denke, es ist nur ein Zufall, dass er in diesen Bereich fällt (außerdem wäre jede kleinere Zahl auch eine gültige IPv6-Adresse)
Tim S.
1
@beeks Ok, es hat schon nicht funktioniert, als ich es gestern ausprobiert habe, aber da es ein ungesicherter Router war, ist das vielleicht nicht so überraschend. Wollen Sie damit sagen, dass Sie im Grunde genommen eine Zufallszahl in Ihre Adressleiste eingegeben haben? Oder welche Art von Tabelle hatten Sie dort, die seltsam codierte IP-Adressen ungesicherter Router enthielt? ;)
Christian
1
@ Christian, LOL. Es handelte sich um eindeutige Nachrichtenkennungen in einem Compliance-System. Total verrückt, dass ich sie in die Adressleiste eingefügt habe, und es hat funktioniert. Ich wette, das wird mir in meinem Leben nie wieder passieren :)
Beeks

Antworten:

93

Dies ist eine sehr interessante Frage, und ich habe eine Weile gebraucht, um das herauszufinden. Die kurze Antwort ist, dass die letzten 32 Bits der Zahl 3660944368 sind (in Dezimalzahl, die gefunden werden kann durch 714687644714805209715128610715964400 mod 2^32).

Dies ist der Dezimalwert der IPv4-Adresse 218.53.147.240 , der ermittelt wird, indem er in base-256 konvertiert wird, 3660944368 = 218*(256^3)+53*(256^2)+147*(256)+240analog zum Ausgeben einer Dezimalzahl (base-10). Zum Beispiel 234 = 2*10^2+ 3*10 + 4.

Wie @chritohnide ausführt, wird jeder Abschnitt mit gepunkteten IPv4-Adressen als Oktett bezeichnet, da er 8 Binärziffern darstellt. Es ist auch erwähnenswert, dass die verschiedenen Formate von IPv4-Adressen (wie die gepunktete Dezimalzahl oder die reine Dezimalzahl) nur unterschiedliche Darstellungsweisen für die 32-Bit-Binärzahl sind.

Da es sich bei IPv4-Adressen um 32-Bit-Nummern handelt, werden nur die letzten 32-Bit-Nummern zum Auflösen der Adresse verwendet. Warum das so ist, ist nicht so offensichtlich. Wie bereits erwähnt, ähnelt die vollständige Zahl einer IPv6-Adresse in Dezimalschreibweise auffallend, ist jedoch keine gültige Adresse.

In Bezug auf die Teredo-Spezifikation (siehe 4. Teredo-Adressen ) belegt das Client-IPv4 die letzten 32 Bit der IPv6-Adresse, aber das Präfix der Nummer stimmt nicht mit der Teredo-Spezifikation überein (siehe auch Wikipedia ).

Erdnussbutter
quelle
12
Gute Antwort. Es kann auch nützlich sein zu erwähnen, dass jeder Abschnitt einer gepunkteten IPv4-Adresse als Oktett bezeichnet wird, da es sich um die dezimale Darstellung einer 8-Bit-Binärzahl handelt (4 Oktette = 4 x 8 Bits = 32 Bits der IPv4-Adresse) und dass die Dezimalzahl Version ist wirklich nur zu unserem Vorteil.
Chritohnide
4
Sind Sie sicher, dass es sich nicht um eine IPv6-Dezimalnotation handelt? Es konvertiert erfolgreich zu0089:a4d2:471b:45ef:77ed:c70f:da35:93f0
Izkata
5
@Izkata: Unwahrscheinlich, da sich diese Adresse in einem nicht zugewiesenen und reservierten Teil des IPv6-Adressraums befindet.
Henning Makholm
3
Die Zahl (in ASCII) wird wahrscheinlich nur durch eine der Funktionen von C stdlib to int ausgeführt, um sie in die 32-Bit-IPv4-Adresse umzuwandeln. In den meisten Implementierungen von C stdlib führen diese Konvertierungen automatisch eine Modulo 2 ^ <gewünschte Ganzzahlgröße> durch. Das Ergebnis ist in diesem Fall genau das beobachtete Verhalten.
Tonny
3
Es ist erwähnenswert, dass dies wahrscheinlich eine Eigenheit des URL-Parsers von Firefox ist. Es scheint zu erkennen, dass es sich eher um eine Zahl als um eine URL handelt, und versucht, sie als 32-Bit-ungepunktete IP-Adresse zu analysieren (die resultierende geparste Ganzzahl ergibt modulo 32-Bit und führt keine wirklichen Fehlerprüfungen an der Eingabe durch ). Chrome zeigt dieses Verhalten beispielsweise nicht. Es könnte sich tatsächlich lohnen, dies als trivialen Fehler in Firefox zu melden.
Jason C