Frage Das Pingen einer IP-Adresse erfolgt mit unterschiedlicher IP-Adresse


Wenn ich versuche, die IP-Adresse zu pingen 10.10.208.57 Ich habe keine Antwort, da im Netzwerk mit dieser IP-Adresse nichts existiert.

Allerdings wenn ich versuche zu pingen 10.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

Bedenkt, dass 10.10.208.47 ist ein Lexmark E120n-Drucker, was könnte der Ursprung dieses seltsamen Problems sein?


21
2018-05-19 11:40


Ursprung


Bump, schau dir die Antwort in diesem Thread an: superuser.com/questions/486788/ ... - Michal Sokolowski


Antworten:


Dieses Verhalten ist eigentlich auf eine normale Funktion von Ping zurückzuführen und hat keine Beziehung zu Ihrer tatsächlichen Hardware.

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

So 057 meint 57 in der Basis 8, die 47 ist. So sendet Ping die ICMP Abfrage an die Maschine an der Adresse 10.10.208.47 und deshalb eine Antwort davon bekommen.

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

Bearbeiten: Wie viele Kommentare vorschlagen, ist diese Funktion nicht spezifisch für ping und kann in vielen CLI-Softwares gefunden werden, die IP-Adressen manipulieren.


43
2018-05-19 11:48



Whoa! Vielen Dank! Mein Herz blieb für einige Minuten stehen :-) - PsyStyle
Nicht nur Ping. Viele Dinge tun das. - Jenny D
Bash behandelt alle "Integer" so askubuntu.com/questions/621500/ ... - Tim


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 Zahlen als `` Teile '' in einem `. ' Die Notation kann dezimal, oktal oder hexadezimal sein, wie in der Sprache C angegeben (d. h. eine führende 0x oder 0X bedeutet hexadezimal; andernfalls bedeutet 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. Also 57 = 047 = 0x39.


15
2018-05-19 12:01



Mir ist aufgefallen, dass sich sogar 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
"Wenn Sie also eine führende Null verwenden, wird die Zahl als Dezimalzahl interpretiert." Ich denke, das ist ein Tippfehler, du meintest oktal als richtig interpretiert? - Cruncher
Danke @ Cruncher. Ich beschuldige eine zu hohe Konzentration von Blut in meinem Koffeinstrom. - Jenny D