Warum kann ich 127.1 anpingen?

11

Ich weiß, dass IPv6 das Weglassen aufeinanderfolgender Nullen ermöglicht. Aber wie wäre es mit IPv4? Ich habe im Internet keinen Hinweis darauf gefunden, einschließlich Wikipedia und RFC 791 - Internet Protocol. In diesem Dokument wird vorgeschlagen , dass in einer IPv4-Adresse "Führende Nullen weggelassen werden können" (Suche nach dem Begriff "weggelassen"). Nicht spezifisch genug.

Schauen Sie sich diese Shell-Sitzung an:

[~]$ ping -c 1 127.1
PING 127.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.040 ms

--- 127.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.040/0.040/0.040/0.000 ms
[~]$ ping -c 1 127.0.1
PING 127.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.044 ms

--- 127.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.044/0.044/0.044/0.000 ms
[~]$ ssh 127.1 :
The authenticity of host '127.1 (127.0.0.1)' can't be established.
ECDSA key fingerprint is 04:48:fa:f2:ef:95:7c:35:46:39:2e:d3:89:dd:cd:87.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '127.1' (ECDSA) to the list of known hosts.
[email protected]'s password: 

Sowohl Ping als auch SSH verstehen eindeutig, dass 127.1 und 127.0.1 mit 127.0.0.1 identisch sind. Wo ist das angegeben?

Alexandre de Verteuil
quelle
7
Diese Manpage, die in diesem Beitrag zum Stapelüberlauf verlinkt ist, befindet sich möglicherweise ganz in Ihrer Nähe.
Nerdwaller
1
Das ist ein alter Notationsstil, aber ja: es funktioniert :-)
Sander Steffann
1
@nerdwaller: Bitte poste das als Antwort. (Bonuspunkte, wenn Sie herausfinden, warum ping 0.0.0.0oder ping 0genauso funktioniert ...)
user1686

Antworten:

14

Es gibt einen Stapelüberlauf-Beitrag von vor ungefähr einem Jahr, in dem etwas Ähnliches gefragt wird ( dieser Beitrag ).

Der Hauptgrund ist, wie inet_aton()( Manpage ) die Oktette in die Binäradresse konvertiert.

A B C D

Jeder der vier numerischen Teile gibt ein Byte der Adresse an. Die Bytes werden in der Reihenfolge von links nach rechts zugewiesen, um die Binäradresse zu erzeugen.

ABC

Die Teile a und b geben die ersten zwei Bytes der Binäradresse an. Teil c wird als 16-Bit-Wert interpretiert, der die zwei Bytes ganz rechts der Binäradresse definiert. Diese Notation eignet sich zur Angabe (veralteter) Netzwerkadressen der Klasse B.

ab

Teil a gibt das erste Byte der Binäradresse an. Teil b wird als 24-Bit-Wert interpretiert, der die drei Bytes ganz rechts der Binäradresse definiert. Diese Notation eignet sich zur Angabe (veralteter) Netzwerkadressen der Klasse C.

ein

Der Wert a wird als 32-Bit-Wert interpretiert, der ohne Byte-Neuanordnung direkt in der Binäradresse gespeichert wird.

Dies wird von POSIX.anything nicht definiert - ist aber ziemlich weit verbreitet.

Nerdwaller
quelle
1
Genial, und ich habe auch den Beitrag überprüft, auf den Sie bei Stack Overflow verlinkt haben. Es gab großartige Einblicke, wie verschiedene Zahlensysteme verwendet werden können. @grawity Wikipedia sagt, dass 0.0.0.0/8 das aktuelle Netzwerk ist. Ich gehe davon aus, dass 0.0.0.0/32 der aktuelle Host sein muss und dass Ping nur / 32 "Netzwerke" erwartet. Ich habe jedoch keine explizite Referenz gefunden.
Alexandre de Verteuil
2
@AlexandredeVerteuil: Ping erwartet Hosts , keine Netzwerke ... also ja, / 32 für IPv4.
user1686
3

Es ist ein Relikt aus den alten Tagen der klassischen Adressierung. 127.1bedeutet Netzwerk 127, Host 1. (Und ja, 127.257ist legal, da das Netzwerk 127mehr als 256 Hosts haben kann.

David Schwartz
quelle
127.257 bedeutet insbesondere 127.0.1.1, eine Adresse, die ich tatsächlich auf dem alten KMS-Serveraktivator sehe, der unter Windows 8.0 funktioniert hat
Paul Stelian