Wenn ich versuche, die IP-Adresse anzupingen, 10.10.208.57
erhalte ich keine Antwort, da im Netzwerk nichts mit dieser IP-Adresse existiert.
Wenn ich jedoch versuche zu pingen10.10.208.
057
stattdessen antwortet eine andere IP-Adresse:
root@everest:/root# ping 10.10.208.057
PING 10.10.208.057 (10.10.208.47) 56(84) bytes of data.
64 bytes from 10.10.208.47: icmp_seq=1 ttl=253 time=0.732 ms
64 bytes from 10.10.208.47: icmp_seq=2 ttl=253 time=0.695 ms
64 bytes from 10.10.208.47: icmp_seq=3 ttl=253 time=0.659 ms
64 bytes from 10.10.208.47: icmp_seq=4 ttl=253 time=0.705 ms
Wenn man bedenkt, dass es 10.10.208.47
sich um einen Lexmark E120n-Drucker handelt, was könnte die Ursache dieses seltsamen Problems sein?
Antwort1
Dieses Verhalten ist eigentlich auf eine normale Ping-Funktion zurückzuführen und hat nichts mit Ihrer tatsächlichen Hardware zu tun.
Wenn man der IP-Adresse (oder einem Teil davon) eine Null voranstellt, wird die Nummer alsOktal.
Das 057
bedeutet 57
in Basis 8, also 47. Somit sendet Ping dieICMPAnfrage an die Maschine an der Adresse stellen 10.10.208.47
und so eine Antwort von ihr erhalten.
Beachten Sie, dass Sie Adressen auch im Hexadezimalformat anpingen können, indem Sie das Präfix 0x statt nur 0 verwenden.
Bearbeiten: Wie aus vielen Kommentaren hervorgeht, ist diese Funktion eigentlich nicht spezifisch für ping
die Manipulation von IP-Adressen und kann in vielen CLI-Softwareprogrammen gefunden werden.
Antwort2
Ping verwendet wie viele andere Unix-Programme die C-Bibliotheken auf Ihrem Unix-System zur Namensauflösung. Eine der verwendeten Funktionen ist inet_aton
.
Die Manpage für inet_aton
sagt:
Alle als „Teile“ in einer „.“-Notation angegebenen Zahlen können dezimal, oktal oder hexadezimal sein, wie in der Sprache C angegeben (d. h. ein führendes 0x oder 0X impliziert hexadezimal, andernfalls impliziert eine führende 0 oktal, andernfalls wird die Zahl als Dezimalzahl interpretiert).
Wenn Sie also eine führende Null verwenden, wird die Zahl als Oktalzahl interpretiert. Daher 57 = 047 = 0x39.