Tutti lo stanno complicando eccessivamente con RFC, classi IP e simili. Basta eseguire alcuni test per vedere in che modo il ping
comando analizza l'input IP da parte dell'utente (chaff estraneo rimosso):
> ping 1
Pinging 0.0.0.1 with 32 bytes of data:
> ping 1.2
Pinging 1.0.0.2 with 32 bytes of data:
> ping 1.2.3
Pinging 1.2.0.3 with 32 bytes of data:
> ping 1.2.3.4
Pinging 1.2.3.4 with 32 bytes of data:
> ping 1.2.3.4.5
Ping request could not find host 1.2.3.4.5. Please check the name and try again.
> ping 255
Pinging 0.0.0.255 with 32 bytes of data:
> ping 256
Pinging 0.0.1.0 with 32 bytes of data:
Come puoi vedere, il ping
comando (in Windows) ti consente di utilizzare diversi formati di indirizzi IP. Un indirizzo IPv4 può essere suddiviso in quattro parti ("punteggiato-quad") in questo modo: A.B.C.D
e il ping
comando consente di lasciarne un po ', compilando un valore predefinito 0
come segue:
1 part (ping A) : 0.0.0.A
2 parts (ping A.B) : A.0.0.B
3 parts (ping A.B.C) : A.B.0.C
4 parts (ping A.B.C.D) : A.B.C.D
Se si fornisce solo una singola parte, quindi se è inferiore a 255 (il massimo per un ottetto), viene trattato come un ottetto come sopra, ma se è maggiore di 255, viene convertito e spostato nel campo successivo (cioè, mod 256
).
Ci sono alcuni casi limite come fornire più di quattro parti che non sembrano funzionare (ad esempio, google.com
l'IP del ping non funzionerà per nessuno dei due 0.74.125.226.4
o 74.125.226.4.0
).
È inoltre possibile utilizzare la notazione esadecimale sia in forma tratteggiata quadrata che piatta, ma è necessario formattarla pre-in attesa 0x
di ciascun ottetto.
Quindi, ci sono molti modi per rappresentare un indirizzo IP (IPv4). Puoi usare il formato flat o tratteggiato quad (o tratteggiato triplo, tratteggiato doppio o persino tratteggiato singolo) e, per ognuno, puoi usare (o anche mescolare e abbinare) decimale, ottale ed esadecimale. Ad esempio, è possibile eseguire il ping google.com
nei seguenti modi:
google.com
(nome del dominio)
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
(ಠ_ಠ)
(Meno male che il supporto per la notazione binaria non è stato aggiunto!)
Applicazione :
Nel tuo caso, il ping 192.168.072
utilizza il terzo formato nella tabella sopra ( A.B.0.C
), quindi stai effettivamente eseguendo il ping 192.168.0.072
. Inoltre, poiché hai uno zero iniziale sull'ultima parte, viene trattato come ottale, che in decimale è 58.
Mistero risolto.
Si noti che mentre il ping
comando Windows consente una così ampia varietà di formati per l'input e interpreta i formati non standard nei modi visti, ciò non significa necessariamente che è possibile utilizzare tali formati ovunque. Alcuni programmi potrebbero costringerti a fornire tutte e quattro le parti di un quadrato tratteggiato, altri potrebbero non consentire il missaggio e l'abbinamento di decimali e ottali e così via.
Inoltre, gli indirizzi IPv6 complicano ulteriormente la logica di analisi e l'accettabilità del formato di input.
Addendum :
syss ha sottolineato che se si utilizza un carattere non valido in uno dei numeri (ad esempio, 8
o 9
quando si utilizza ottale, a g
in modalità esadecimale, ecc.), ping
è abbastanza intelligente da riconoscerlo e interpretarlo come una stringa (-al? -ic?) URL anziché come indirizzo IP numerico.
(Dato che qualcuno che ha avuto numerosi aneurismi e attacchi di cuore cercando di scrivere un codice apparentemente "semplice" per soddisfare il numero esponenzialmente esponenziale di permutazioni dei valori dei dati, apprezzo che - sembra - elaborare correttamente tutte le variazioni di input; in questo caso, almeno 3 1 +3 2 +3 3 +3 4 = 120 variazioni.)
Pertanto, pur specificando il 010.020.030.040
ping 8.16.24.32
come previsto, il passaggio 010.020.030.080
a ping
verrà trattato come un URL anziché come un indirizzo IP, come se foo.bar.baz.com
potesse (ma purtroppo non esistesse) esistere. In altre parole, tenta di eseguire il ping del sottodominio 010
sul sottodominio 020
sul dominio 030
nel dominio di primo livello 080
. Tuttavia, poiché 080
non è un TLD valido (come .com
, .net
e i loro amici), la connessione non riesce proprio al primo passo.
La stessa cosa accade 090.010.010.010
quando il personaggio non valido si trova in un ottetto diverso. Allo stesso modo, 0xf.0xf.0xf.0xf
ping 15.15.15.15
, ma 0xh1.0x1.0xg0.0f
fallisce.
Vabbè, immagino sia quello che ottieni per non essere fluente in più basi di numeri.
Probabilmente è più facile e sicuro assicurarsi di usare sempre gli indirizzi a 4 punte quadrate ("40q"? "Quaddy-quad"? "Cutie-q"?).
Quindi vai avanti e impara alcune basi di numeri . Sarai in grado di esibirti e di essere la vita delle feste e, come si suol dire, ci sono 10 tipi di persone: quelli che conoscono i binari e quelli che non lo fanno.
Non pensiamo nemmeno agli indirizzi IPv6; Penso che siano uno dei 111 sigilli !!!