Jeder verkompliziert es mit RFCs, IP-Klassen und dergleichen. Führen Sie einfach ein paar Tests durch, um ping
festzustellen, wie der Befehl die vom Benutzer eingegebene IP-Adresse analysiert (überflüssige Spreu entfernt):
> ping 1
Pinging 0.0.0.1 with 32 bytes of data:
> ping 1.2
Pinging 1.0.0.2 with 32 bytes of data:
> ping 1.2.3
Pinging 1.2.0.3 with 32 bytes of data:
> ping 1.2.3.4
Pinging 1.2.3.4 with 32 bytes of data:
> ping 1.2.3.4.5
Ping request could not find host 1.2.3.4.5. Please check the name and try again.
> ping 255
Pinging 0.0.0.255 with 32 bytes of data:
> ping 256
Pinging 0.0.1.0 with 32 bytes of data:
Wie Sie sehen, können Sie mit dem ping
Befehl (in Windows) verschiedene IP-Adressformate verwenden. Eine IPv4-Adresse kann wie folgt in vier Teile („gepunktetes Quad“) unterteilt werden: Mit A.B.C.D
dem ping
Befehl können Sie einige weglassen 0
und die folgenden Standardwerte eingeben:
1 part (ping A) : 0.0.0.A
2 parts (ping A.B) : A.0.0.B
3 parts (ping A.B.C) : A.B.0.C
4 parts (ping A.B.C.D) : A.B.C.D
Wenn Sie nur ein einzelnes Teil angeben, wird es wie oben beschrieben behandelt, wenn es unter 255 liegt (das Maximum für ein Oktett). Wenn es jedoch größer als 255 ist, wird es konvertiert und in das nächste Feld verschoben (dh mod 256
).
Es gibt einige Randfälle, bei denen mehr als vier Teile anscheinend nicht funktionieren (z. B. funktioniert die google.com
IP von Ping entweder nicht 0.74.125.226.4
oder nicht 74.125.226.4.0
).
Sie können auch die hexadezimale Notation sowohl in gepunkteter Quad-Form als auch in flacher Form verwenden. Sie müssen sie jedoch formatieren, indem Sie sie vor 0x
jedem Oktett einfügen.
Es gibt also viele Möglichkeiten, eine (IPv4-) IP-Adresse darzustellen. Sie können ein flaches oder gepunktetes Vierfach- (oder gepunktetes Dreifach-, gepunktetes Doppel- oder sogar gepunktetes Einfach-) Format verwenden und für jedes Format Dezimal, Oktal und Hexadezimal verwenden (oder sogar mischen und abgleichen). Sie können beispielsweise google.com
auf folgende Arten pingen:
google.com
(Domainname)
74.125.226.4
(gepunktete Dezimalstelle)
1249763844
(flache Dezimalstelle)
0112.0175.0342.0004
(gepunktetes Oktal)
011237361004
(flaches Oktal)
0x4A.0x7D.0xE2.0x04
(gepunktetes Hex)
0x4A7DE204
(flaches Sechseck)
74.0175.0xe2.4
(ಠ_ಠ)
(Gott sei Dank, dass die Unterstützung von Binärnotationen nicht hinzugefügt wurde!)
Anwendung :
In Ihrem Fall 192.168.072
verwendet Ping das dritte Format in der obigen Tabelle ( A.B.0.C
), sodass Sie tatsächlich pingen 192.168.0.072
. Da Sie im letzten Teil eine führende Null haben, wird diese als Oktal behandelt, das in Dezimalzahl 58 ist.
Geheimnis gelüftet.
Beachten Sie, dass der Windows- ping
Befehl zwar eine Vielzahl von Formaten für die Eingabe zulässt und Nicht-Standardformate in der gezeigten Weise interpretiert, dies jedoch nicht unbedingt bedeutet, dass Sie solche Formate überall verwenden können. Einige Programme können Sie zwingen, alle vier Teile eines gepunkteten Quadrats anzugeben, andere erlauben möglicherweise nicht das Mischen und Anpassen von Dezimal- und Oktalwerten und so weiter.
Außerdem erschweren IPv6-Adressen die Parsing-Logik und die Akzeptanz des Eingabeformats.
Nachtrag :
syss wies darauf hin, dass wenn Sie ein ungültiges Zeichen in einer der Zahlen verwenden (z. B. ein 8
oder 9
wenn Sie ein Oktal, ein g
im Hex-Modus usw. verwenden), ping
es klug genug ist, dies zu erkennen und als Zeichenfolge zu interpretieren (-al? -ic?) URL anstelle einer numerischen IP-Adresse.
(Als jemand, der zahlreiche Aneurysmen und Herzinfarkte hatte und versuchte, vermeintlich „einfachen“ Code zu schreiben, um die exponentiell explodierende Anzahl von Permutationen von Datenwerten zu berücksichtigen, schätze ich, dass er alle Eingabevariationen korrekt verarbeitet.) Fall, mindestens 3 1 +3 2 +3 3 +3 4 = 120 Variationen.)
Während die Angabe von 010.020.030.040
will ping 8.16.24.32
wie erwartet erfolgt, wird die Übergabe 010.020.030.080
an ping
wie eine URL statt wie eine IP-Adresse behandelt - wie foo.bar.baz.com
sie existieren könnte (aber leider nicht existiert). Mit anderen Worten, es wird versucht, die Unterdomäne 010
an die Unterdomäne 020
in der Domäne 030
auf der obersten Ebene zu senden 080
. Da 080
es sich jedoch nicht um eine gültige TLD (wie .com
, .net
und ihre Freunde) handelt, schlägt die Verbindung gleich im ersten Schritt fehl.
Dasselbe passiert, 090.010.010.010
wenn sich das ungültige Zeichen in einem anderen Oktett befindet. Ebenso 0xf.0xf.0xf.0xf
pingt 15.15.15.15
, 0xh1.0x1.0xg0.0f
scheitert aber .
Na ja, ich denke, das ist es, was man bekommt, wenn man mehrere Zahlen nicht fließend beherrscht.
Es ist wahrscheinlich einfacher und sicherer, nur sicherzustellen, dass immer 4-Punkt-Quad-Adressen ("40q"? "Quaddy-Quad"? "Cutie-Q"?) Verwendet werden.
Geht also weiter und lernt einige Zahlenbasen . Sie werden in der Lage sein, auf Partys anzugeben und das Leben von Partys zu sein, und wie sie sagen, gibt es 10 Arten von Menschen: diejenigen, die binär sind und diejenigen, die nicht sind.
Denken wir nicht einmal an IPv6-Adressen. Ich denke, sie sind eines der 111 Siegel !!!