Das Pingen einer IP-Adresse antwortet mit einer anderen IP

21

Wenn ich versuche, die IP-Adresse zu pingen, erhalte 10.10.208.57ich keine Antwort, da im Netzwerk nichts mit dieser IP-Adresse vorhanden ist.

Wenn ich jedoch versuche, 10.10.208.057 zu pingen, antwortet stattdessen 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 10.10.208.47es sich um einen Lexmark E120n handelt, woran könnte dieses seltsame Problem liegen?

PsyStyle
quelle
3
Bump, sieh dir die Antwort in diesem Thread an: superuser.com/questions/486788/…
Michal Sokolowski

Antworten:

43

Dieses Verhalten ist eigentlich auf eine normale Ping-Funktion zurückzuführen und steht in keinem Zusammenhang mit Ihrer tatsächlichen Hardware.

Wenn Sie der IP-Adresse (oder einem Teil davon) eine führende Null voranstellen, wird die Zahl als Oktal interpretiert .

Das 057bedeutet also 57in der Basis 8, was 47 ist. Somit sendet Ping die ICMP- Abfrage an die Maschine, die sich an der Adresse befindet, 10.10.208.47und erhält daher eine Antwort von ihr.

Beachten Sie, dass Sie Adressen auch hexadezimal anpingen können, indem Sie das 0x-Präfix anstelle von nur 0 verwenden.

Bearbeiten: Wie aus vielen Kommentaren hervorgeht, ist diese Funktion nicht spezifisch für pingviele CLI-Softwareprogramme, die IP-Adressen bearbeiten.

eltrai
quelle
Whoa! Vielen Dank! Mein Herz blieb für ein paar Minuten stehen :-)
PsyStyle
4
Nicht nur pingen. Das machen viele Dinge.
Jenny D sagt Reinstate Monica
1
Bash behandelt alle "ganzen Zahlen" so askubuntu.com/questions/621500/…
Tim
15

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_atonsagt:

Alle Zahlen werden als "Teile" in einem "." Die Notation kann dezimal, oktal oder hexadezimal laut Angabe in der Sprache C sein (dh ein führendes 0x oder 0X impliziert hexadezimal; andernfalls impliziert eine führende 0 oktal; andernfalls wird die Zahl als dezimal interpretiert).

Wenn Sie also eine führende Null verwenden, wird die Zahl als Oktal interpretiert. Somit ist 57 = 047 = 0x39.

Jenny D sagt Reinstate Monica
quelle
Mir ist aufgefallen, dass sich auch Windows gleich verhält. Vielen Dank für Ihre ausführliche Antwort!
PsyStyle
@ PsyStyle Gern geschehen! Es ist eine Standardnotation für Zahlen in einem breiten Spektrum von Betriebssystemen und Programmiersprachen.
Jenny D sagt Reinstate Monica
Msgstr "Wenn Sie eine führende Null verwenden, wird die Zahl als Dezimalzahl interpretiert." Ich denke das ist ein Tippfehler, du meintest das als oktal interpretiert oder?
Cruncher
1
Danke @Cruncher. Ich beschuldige eine zu hohe Blutkonzentration in meinem Koffeinstrom.
Jenny D sagt Reinstate Monica