Warum funktioniert „Ping X“, wenn „X“ eine beliebige ganze Zahl ist?

Warum funktioniert „Ping X“, wenn „X“ eine beliebige ganze Zahl ist?

Ich habe eine seltsame Eigenart des Ping-Dienstprogramms von Windows 10 entdeckt. Wenn Sie eine ganze Zahl anstelle einer IP-Adresse pingen, wird diese Zahl in eine IPv4-Adresse „konvertiert“. Die Konvertierung erfolgt so, dass das erste Oktett Ihre 256^3-Stelle ist, das zweite Oktett 256^2, das dritte 256^1 und das letzte Oktett die Einerstelle oder 256^0.

Beispielsweise wird mit „Ping 200“ ein Ping an 0.0.0.200 gesendet, mit „Ping 400“ jedoch ein Ping an 0.0.1.144, wobei die „1“ im dritten Oktett für 256 steht (256 + 144 = 400).

Eine schnelle Google-Suche (obwohl mir kein guter Suchbegriff einfiel) hat nichts gebracht.

Meine einzigen beiden Theorien sind diese:

  1. Es kann sein, dass in einer früheren Iteration des IP-Schemas (also den nicht verwendeten Versionen v1, v2 oder v3) nur einzelne ganze Zahlen verwendet werden sollten. Microsoft hat in seiner Besessenheit hinsichtlich der Abwärtskompatibilität einen Übersetzungsalgorithmus in das Ping-Dienstprogramm geschrieben, um dies zu handhaben, als Ping erstmals codiert wurde.
  2. Es kann sein, dass das Ping-Dienstprogramm aufgrund seiner Codierung normalerweise eine gültige IPv4-Adresse annimmt und diese in eine einzelne Ganzzahl übersetzt, bevor es mit diesen Daten etwas macht. Wenn es also als Kontrolle im Code erkennt, dass der Benutzer eine einzelne Ganzzahl eingegeben hat, überspringt es einfach diesen ersten Übersetzungsschritt.

Irgendwelche Ideen? Meine Kollegen waren auf jeden Fall neugierig, aber sie hatten genauso wenig Ahnung wie ich.

BEARBEITEN: Habe es gerade auf meiner Arch Linux-Maschine getestet und kann bestätigen, dass das Verhalten dort auch auftritt, was meine erste Theorie wahrscheinlich widerlegt.

Antwort1

Die Antwort ist dokumentiert inWikipedia:

Andere Adressdarstellungen waren bei der Verwendung von Classful Networking üblich. Beispielsweise wird die Loopback-Adresse 127.0.0.1 üblicherweise als 127.1 geschrieben, da sie zu einem Klasse-A-Netzwerk mit acht Bits für die Netzwerkmaske und 24 Bits für die Hostnummer gehört. Wenn in der Adresse in Punktnotation weniger als vier Zahlen angegeben sind, wird der letzte Wert als Ganzzahl mit so vielen Bytes behandelt, wie zum Auffüllen der Adresse auf vier Oktette erforderlich sind. Somit entspricht die Adresse 127.65530 127.0.255.250.

Antwort2

Das ist keine Eigenart, sondern ein Feature.

Denken Sie daran, dass die Punktnotation einer IPv4-Adresse lediglich eine Möglichkeit ist, die vier Byte (also 32 Bit) lange Ganzzahl darzustellen, die eine IPv4-Adresse ist (und die in das 32-Bit-Zielfeld eines IP-Pakets gehört). Verschiedene Dienstprogramme akzeptieren unterschiedliche Formate für diese Ganzzahl.

Ich weiß, dass einige Browser in der Vergangenheit solche Dezimalzahlen als Adresse in der Adressleiste akzeptierten. (Ich war überrascht, dass meine beiden aktuellen Browser, Firefox und Chrome, dies nicht mehr tun.)

Antwort3

".0" kann bedingt weggelassen werden

Sie verwenden häufig den Befehl „ping 127.0.0.1“, um einen Loop-Test auf dem Computer durchzuführen und zu überprüfen, ob die TCP/IP-Protokollsuite des Computers korrekt installiert ist. Aber haben Sie es gefunden? Das gleiche Testergebnis kann mit dem Befehl „ping 127.1“ erzielt werden. Tatsächlich sind die beiden Befehle „ping 127.1“ und „ping 127.0.0.1“ gleich und führen beide Loop-Tests durch.

Warum ist das so? Dies ist die Fähigkeit, IP-Adressen in der Ping-Befehlsanwendung zu verwenden. Jeder weiß, dass die IP-Adresse aus 32 Binärziffern besteht. Um es für alle einfacher zu machen, sich das zu merken, werden alle 8 Binärziffern in Dezimalziffern umgewandelt. Daher besteht eine leicht zu merkende IP-Adresse aus vier Dezimalziffern (z. B. 127.0.0.1). Da das Windows-Betriebssystem die Funktion hat, „.0“ automatisch auszufüllen, kann ich „127.0.0.1“ in „127.1“ ändern.

Das Weglassen dieser „.0“ ist jedoch bedingt eingeschränkt und kann nicht beliebig weggelassen werden. Bei der Anwendung des Ping-Befehls können Sie nur eine oder mehrere „.0“ weglassen, die vor der letzten Dezimalzahl der IP-Adresse erscheinen, z. B. das Umschreiben des Befehls „ping 127.0.0.1“ in „ping 127.1“.

Stehen die eine oder mehreren ".0" nicht direkt hinter dem letzten Teil der Dezimalzahl, sondern an anderen Stellen, dann können diese ".0" nicht weggelassen werden, so kann beispielsweise "ping 202.0.96.1" nicht als "ping 202.96.1" geschrieben werden. Denn das von "ping 202.96.1" zurückgegebene Ergebnis ist die Antwortnachricht von "202.96.0.1" und nicht die Antwortnachricht von "202.0.96.1".

Zahlenfolge statt IP-Adresse

Im Ping-Befehl können Sie anstelle einer IP-Adresse auch eine numerische Zeichenfolge verwenden. Führen Sie den Befehl „ping 3658906394“ aus und Sie erhalten die Rückgabeinformationen der IP-Adresse „218.22.123.26“.

Warum ist das so? Tatsächlich ist „3658906394“ eine andere Darstellung der IP-Adresse „218.22.123.26“. Natürlich können Sie auf die gleiche Weise auch andere IP-Adressen anpingen.

Wie wird die Zeichenfolge konvertiert? Eigentlich ist es nicht kompliziert. Am Beispiel der IP-Adresse „218.22.123.26“ lautet die Methode zum Konvertieren der IP-Adresse in eine numerische Zeichenfolge wie folgt: Konvertieren Sie zuerst „218.22.123.26“ in hexadezimale Zahl „DA.16.7B.1A“ und entfernen Sie es dann. Nach dem Dezimalpunkt wird es zu „DA167B1A“, und schließlich wird die hexadezimale Zahl in die Dezimalzahl „3658906394“ konvertiert, dann wird „218.22.123.26“ zu „3658906394“. Die gleiche Methode wird verwendet, um andere IP-Adressen in numerische Zeichenfolgen zu konvertieren.

Tipp: In manchen LAN-Umgebungen kann die Verwendung des Befehls „Ping+Zahlenzeichenfolge“ fehlschlagen und die Eingabeaufforderung „Unbekannte Host-Zahlenzeichenfolge“ wird angezeigt. Dies liegt daran, dass die Zahlenzeichenfolge in einen Hostnamen statt in eine IP-Adresse aufgelöst wird.

Antwort4

IPv4-Adressen sind vorzeichenlose 32-Bit-Ganzzahlen. In einem fehlgeleiteten Versuch, sie für Menschen lesbarer zu machen, werden sie in der Benutzeroberfläche traditionell in der „gepunkteten Dezimalschreibweise“ angezeigt, wobei jedes Oktett (8-Bit-Byte), beginnend mit dem höchstwertigen, als Dezimalzahl dargestellt wird, die durch einen Punkt vom nächsten Oktett getrennt ist.

Es ist nicht allzu überraschend, dass einige Benutzeroberflächen die Eingabe von allem zulassen, was sie als UInt32 interpretieren können, und den resultierenden UInt32 als die von Ihnen gewünschte IPv4-Adresse verwenden.

verwandte Informationen