Notazione decimale dotless strana dell'indirizzo IP ... Come funziona?


89

Prima di oggi pensavo di avere un URL negli appunti, ma in realtà avevo quattro numeri interi a 9 cifre copiati da un foglio di calcolo, che erano numeri di identificazione da un sistema proprietario. Completamente estraneo all'attività da svolgere. L'ho incollato in Firefox e sono stato sorpreso di scoprire che in realtà ha caricato una pagina. Ho già visto innumerevoli notazioni decimali di indirizzi IPv4 , ma questo numero lungo è qualcosa di molto, molto più grande.

714687644714805209715128610715964400 (inserisci un HTTP: // davanti)

Come funziona? Tutti i convertitori decimali -> IPv4 che ho trovato su Internet lo considerano un input non valido. Se prendo l'indirizzo IPv4 che carica effettivamente ed eseguo gli stessi calcoli per convertirlo in decimale senza punti, ottengo un numero notevolmente più piccolo.

Ho letto che il ping può accettare dwords e fare qualche conversione, ma non può convertire questo numero in un indirizzo IP. IPv6 è fuori discussione in quanto questo host non ha connettività IPv6.

Che tipo di follia è questa? Ha sconcertato me stesso e i miei colleghi.

Modifica: è tornato online adesso.



2
Sei davvero sicuro che non sia un indirizzo IPv6? Perché questo numero si suddivide in 8 cifre nella base 65536; Gli indirizzi IPv6 hanno 8 cifre nella base 65536. Rappresentato in esadecimale come al solito per IPv6, è 89: a4d2: 471b: 45ef: 77ed: c70f: da35: 93f0.
Christian,

2
@Christian La sua spiegazione per l'origine del numero jives con il numero effettivo mostrato, che ha 36 cifre (ogni ID è di 9 cifre 714xxxxxx o 715xxxxxx). Il computer non ha nemmeno IPv6 e il numero preso come indirizzo IPv4 restituisce effettivamente una pagina web. I numeri da ~ 5E33 a ~ 3E38 hanno 8 cifre nella base 65536, penso che sia solo una coincidenza che il suo rientri in quell'intervallo (in più, qualsiasi numero più piccolo sarebbe anche un indirizzo IPv6 valido)
Tim S.

1
@beeks Ok, già non ha funzionato quando l'ho provato ieri ma dato che era un router non sicuro forse non è così sorprendente. Quindi stai dicendo che hai praticamente inserito un numero casuale nella barra degli indirizzi? O che tipo di foglio di calcolo hai trovato lì che contiene indirizzi IP stranamente codificati di router non sicuri? ;)
Christian

1
@Christian, LOL. Erano alcuni identificatori di messaggi univoci in un sistema di conformità. Totalmente strana possibilità che li abbia incollati nella barra degli indirizzi, e ha funzionato. Scommetto che non mi accadrà mai più nella mia vita :)
Api

Risposte:


93

Questa è una domanda piuttosto interessante, e mi ci è voluto un po 'di tempo per capire. La risposta breve è che gli ultimi 32 bit del numero sono 3660944368 (in decimale, che può essere trovato da 714687644714805209715128610715964400 mod 2^32)

Questo è il valore decimale dell'indirizzo IPv4 218.53.147.240 , che può essere trovato convertendolo in base-256 3660944368 = 218*(256^3)+53*(256^2)+147*(256)+240analogo alla scrittura di un numero in decimale (base-10). Per esempio 234 = 2*10^2+ 3*10 + 4.

Come sottolinea @chritohnide, ogni sezione di indirizzi IPv4 punteggiati è chiamata ottetto in quanto rappresenta 8 cifre binarie. Vale anche la pena notare che i vari formati di indirizzi IPv4 (come il decimale puntato o il decimale puro) sono solo modi diversi di rappresentare il numero binario a 32 bit per il nostro vantaggio.

Poiché gli indirizzi IPv4 sono numeri a 32 bit, per risolvere l'indirizzo vengono utilizzati solo gli ultimi 32 bit del numero. Perché questo è vero non è così ovvio. Come altri hanno sottolineato, il numero completo sembra sorprendentemente simile a un indirizzo IPv6 in decimale, ma non è un indirizzo valido.

Osservando la specifica Teredo (vedi 4. Indirizzi Teredo ), il client IPv4 occupa gli ultimi 32 bit dell'indirizzo IPv6, ma il prefisso del numero non corrisponde alla specifica Teredo (vedi anche Wikipedia ).


12
Bella risposta. Potrebbe anche essere utile menzionare che ogni sezione di un indirizzo IPv4 tratteggiato è chiamata ottetto perché è la rappresentazione decimale di un numero binario a 8 bit (4 ottetti = 4 x 8 bit = 32 bit di indirizzo IPv4) e che il decimale la versione è davvero solo a nostro vantaggio.
Chritohnide,

4
Sei sicuro che non sia la notazione decimale IPv6? Si converte con successo in0089:a4d2:471b:45ef:77ed:c70f:da35:93f0
Izkata il

5
@Izkata: improbabile perché quell'indirizzo sarebbe in una parte non allocata e riservata dello spazio degli indirizzi IPv6.
Henning Makholm,

3
Il numero (in ASCII) verrà probabilmente eseguito attraverso una delle stringhe C stdlib in funzioni int per la conversione in indirizzo ipv4 a 32 bit. Nella maggior parte delle implementazioni di C stdlib, tali conversioni eseguiranno automaticamente un modulo 2 ^ <dimensione intera desiderata>. Il risultato in quel caso è esattamente il comportamento osservato.
Tonny,

3
Vale la pena notare che questo è probabilmente una stranezza del parser URL di Firefox. Sembra riconoscere che è un numero anziché un URL e tenta di analizzarlo come un indirizzo IP non annotato a 32 bit (il numero intero analizzato risultante finisce con un modulo a 32 bit e in realtà non fa alcun errore controllando l'input ). Chrome, ad esempio, non mostra questo comportamento. In realtà potrebbe valere la pena segnalarlo come un bug insignificante in Firefox.
Jason C,
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.