Wie kommt es, dass fehlende Nullen automatisch zu IP-Adressen hinzugefügt werden? (`ping 10.5` entspricht` ping 10.0.0.5`)

36

Ich habe versehentlich getippt

ssh 10.0.05

anstatt

ssh 10.0.0.5

und war sehr überrascht, dass es funktionierte. Ich habe auch versucht 10.005und 10.5diese auch automatisch zu erweitern 10.0.0.5. Ich habe es auch versucht 192.168.1und das erweitert 192.168.0.1. All dies funktionierte auch pingeher mit als ssh, daher vermute ich, dass es für viele andere Befehle funktionieren würde, die eine Verbindung zu einem beliebigen vom Benutzer bereitgestellten Host herstellen.

Warum funktioniert das? Ist dieses Verhalten irgendwo dokumentiert? Ist dieses Verhalten Teil von POSIX oder so? Oder ist es nur eine seltsame Implementierung? (Verwenden von Ubuntu 13.10 für das, was es wert ist.)

Nicu Stiurca
quelle

Antworten:

43

Zitat aus man 3 inet_aton:

   a.b.c.d   Each of the four numeric parts specifies a byte of the
             address; the bytes are assigned in left-to-right order to
             produce the binary address.

   a.b.c     Parts a and b specify the first two bytes of the binary
             address.  Part c is interpreted as a 16-bit value that
             defines the rightmost two bytes of the binary address.
             This notation is suitable for specifying (outmoded) Class B
             network addresses.

   a.b       Part a specifies the first byte of the binary address.
             Part b is interpreted as a 24-bit value that defines the
             rightmost three bytes of the binary address.  This notation
             is suitable for specifying (outmoded) Class C network
             addresses.

   a         The value a is interpreted as a 32-bit value that is stored
             directly into the binary address without any byte
             rearrangement.

   In all of the above forms, components of the dotted address can be
   specified in decimal, octal (with a leading 0), or hexadecimal, with
   a leading 0X).  Addresses in any of these forms are collectively
   termed IPV4 numbers-and-dots notation.  The form that uses exactly
   four decimal numbers is referred to as IPv4 dotted-decimal notation
   (or sometimes: IPv4 dotted-quad notation).

Versuchen Sie zum Spaß Folgendes:

$ nslookup unix.stackexchange.com
Non-authoritative answer:
Name:   unix.stackexchange.com
Address: 198.252.206.140

$ echo $(( (198 << 24) | (252 << 16) | (206 << 8) | 140 ))
3338456716

$ ping 3338456716         # What?  What did we ping just now?
PING stackoverflow.com (198.252.206.140): 48 data bytes
64 bytes from 198.252.206.140: icmp_seq=0 ttl=52 time=75.320 ms
64 bytes from 198.252.206.140: icmp_seq=1 ttl=52 time=76.966 ms
64 bytes from 198.252.206.140: icmp_seq=2 ttl=52 time=75.474 ms
devnull
quelle
2
Was den Grund angeht, bietet es eine nützlichere Möglichkeit, Adressen in Netzwerken der Klassen A, B und C darzustellen. Zum Beispiel ist 127.1 die Loopback-Adresse im 127.0 / 8-Klasse-A-Loopback-Netzwerk, das die 16 Millionen Adressen 127.0 bis 127.0xffffff umfasst. Im Netzwerk der Klasse B 192.168.0 / 16 haben Sie normalerweise die Adressen 192.168.1 bis 192.168.65534. Die INADDR_ANY-Adresse ist 0, die DHCP-Broadcast-Adresse 0xffffffff, die kürzer sind, usw.
Stéphane Chazelas
4
Mann, ich wünschte, Benutzer würden http: // 1249767214 versuchen, bevor sie einfache Fragen wie diese stellen.
Blahdiblah
21

Neben der guten Antwort von @ devnull können IPv4-Adressen auf folgende Weise dargestellt werden.

Beispiel

Dieser Domainname google.comkann auf folgende Arten dargestellt werden:

  • 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  (ಠ_ಠ)

Quelle: Warum gibt Ping 192.168.072 (nur 2 Punkte) eine Antwort von 192.168.0.58 zurück? .

slm
quelle
3
Oktal und Dezimal zu mischen ist Teufelswerk.
Nit
4
Ein Domainname ist in keiner Weise eine IPv4-Adresse.
David Conrad
@DavidConrad - Ich dachte, das wäre offensichtlich, da es nicht numerisch ist. Klarer gemacht für diejenigen, die tihs nicht kennen.
SLM