Come mai gli 0 mancanti vengono aggiunti automaticamente negli indirizzi IP? (`ping 10.5` equivalente a` ping 10.0.0.5`)


36

Ho scritto per errore

ssh 10.0.05

invece di

ssh 10.0.0.5

e fu molto sorpreso che funzionasse. Ho anche provato 10.005e 10.5anche quelli si sono espansi automaticamente a 10.0.0.5. Ho anche provato 192.168.1e che si è esteso a 192.168.0.1. Tutto questo ha funzionato anche pingpiuttosto che ssh, quindi sospetto che funzionerebbe per molti altri comandi che si collegano a un host fornito dall'utente arbitrario.

Perché funziona? Questo comportamento è documentato da qualche parte? Questo comportamento fa parte di POSIX o qualcosa del genere? O è solo una strana implementazione? (Usando Ubuntu 13.10 per quello che vale.)


2
Vedi questo SU Domande e risposte
slm

Risposte:


43

Citando da 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).

Per divertimento, prova questo:

$ 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

2
Per quanto riguarda il motivo, è quello di fornire un modo più utile per rappresentare gli indirizzi nelle reti di classe A, B, C. Ad esempio 127.1 è l'indirizzo di loopback nella rete di loopback di classe A 127.0 / 8 che comprende i 16 milioni di indirizzi da 127.0 a 127.0xffffff. E sulla rete di classe B 192.168.0 / 16, in genere avrai gli indirizzi da 192.168.1 a 192.168.65534. L'indirizzo INADDR_ANY è 0, l'indirizzo di trasmissione DHCP 0xffffffff che è più breve da digitare, ecc.
Stéphane Chazelas

4
Amico, vorrei che gli utenti provassero http: // 1249767214 prima di porre domande semplici come questa.
blahdiblah,

21

Aggiungendo alla buona risposta di @ devnull , gli indirizzi IPv4 possono essere rappresentati nei seguenti modi.

Esempio

Questo nome di dominio google.com, può essere rappresentato nei seguenti modi:

  • 74.125.226.4  (punto decimale)
  • 1249763844  (decimale piatto)
  • 0112.0175.0342.0004  (punteggiato ottale)
  • 011237361004  (ottale piatto)
  • 0x4A.0x7D.0xE2.0x04  (esagono punteggiato)
  • 0x4A7DE204  (esagono piatto)
  • 74.0175.0xe2.4  (ಠ_ಠ)

Fonte: Perché il ping 192.168.072 (solo 2 punti) restituisce una risposta da 192.168.0.58? .


3
Mescolare ottale e decimale è opera del diavolo.
Nit

4
Un nome di dominio non è, in alcun senso, un indirizzo IPv4.
David Conrad,

@DavidConrad - Ho pensato che fosse abbastanza ovvio, dal momento che non è numerico. Lo ha reso più chiaro per coloro che non conoscono questi.
slm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.