Jeder verkompliziert es mit RFCs, IP-Klassen und dergleichen. Führen Sie einfach ein paar Tests durch, um pingfestzustellen, 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 pingBefehl (in Windows) verschiedene IP-Adressformate verwenden. Eine IPv4-Adresse kann wie folgt in vier Teile („gepunktetes Quad“) unterteilt werden: Mit A.B.C.Ddem pingBefehl können Sie einige weglassen 0und 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.comIP von Ping entweder nicht 0.74.125.226.4oder 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 0xjedem 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.comauf 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.072verwendet 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- pingBefehl 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 8oder 9wenn Sie ein Oktal, ein gim Hex-Modus usw. verwenden), pinges 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.040will ping 8.16.24.32wie erwartet erfolgt, wird die Übergabe 010.020.030.080an pingwie eine URL statt wie eine IP-Adresse behandelt - wie foo.bar.baz.comsie existieren könnte (aber leider nicht existiert). Mit anderen Worten, es wird versucht, die Unterdomäne 010an die Unterdomäne 020in der Domäne 030auf der obersten Ebene zu senden 080. Da 080es sich jedoch nicht um eine gültige TLD (wie .com, .netund ihre Freunde) handelt, schlägt die Verbindung gleich im ersten Schritt fehl.
Dasselbe passiert, 090.010.010.010wenn sich das ungültige Zeichen in einem anderen Oktett befindet. Ebenso 0xf.0xf.0xf.0xfpingt 15.15.15.15, 0xh1.0x1.0xg0.0fscheitert 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 !!!