2009-10-12 12 views

risposta

29

Non v'è alcun IPv4 a IPv6 mappatura che è significativo. cose come 0.0.0.0 e 127.0.0.1 sono casi speciali nelle specifiche, quindi hanno un significato equivalente. Ma dato un indirizzo IPv4 non ti dice nulla su quale sarebbe il suo specifico indirizzo IPv6. È possibile utilizzare una ricerca DNS per verificare se un determinato indirizzo IP viene risolto in un host che a sua volta si risolve in un indirizzo IPv6 oltre a un indirizzo IPv4, ma il server DNS deve essere configurato per supportarlo per la macchina specifica.

+5

In un sistema dual-stack, esiste effettivamente una mappatura da IPv4 a IPv6, nello spazio :: ffff: XXXX: XXXX; questo in genere viene visualizzato come ":: ffff: 192.168.1.1" - pertanto esiste una rappresentazione significativa degli indirizzi IPv4 nello spazio degli indirizzi IPv6. –

+1

@DoktorJ, non penso che quella fosse la domanda. Penso che la richiesta fosse per un indirizzo IP6 corretto, non un modo per fare riferimento a un indirizzo IP4 su uno stack IP6. – Yishai

+1

@DoktorJ Ma a meno che non si disponga di una sorta di facilità di routing, questa mappatura non è di grande aiuto. – glglgl

4

C'era uno spazio indirizzo riservato in IPv6 per gli indirizzi IPv4, in cui si è semplicemente prefissato l'indirizzo IPv4 con 96 0-bit. Per esempio. 192.168.10.13 -> ::C0A8:0A0D. Come so, questo è stato deprecato e non sono più disponibili conversioni dirette.

+7

Penso che ci siano ancora indirizzi IPv6 mappati IPv4 che non sono stati deprecati. Il tuo esempio in questo schema sarebbe :: ffff: c0a8: 0a0d. Quello con 0 in esso era chiamato IPv6 compatibile con IPv4. –

15

Le implementazioni ibride dual-stack IPv6/IPv4 supportano in genere una classe speciale di indirizzi, gli indirizzi mappati IPv4. Per maggiori verificare il seguente link:

http://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses

Per la conversione IPv4 a IPv6 mappato, è possibile utilizzare il seguente:

String ip = "127.0.0.1"; 
String[] octets = ip.split("\\."); 
byte[] octetBytes = new byte[4]; 
for (int i = 0; i < 4; ++i) { 
      octetBytes[i] = (byte) Integer.parseInt(octets[i]); 
} 

byte ipv4asIpV6addr[] = new byte[16]; 
ipv4asIpV6addr[10] = (byte)0xff; 
ipv4asIpV6addr[11] = (byte)0xff; 
ipv4asIpV6addr[12] = octetBytes[0]; 
ipv4asIpV6addr[13] = octetBytes[1]; 
ipv4asIpV6addr[14] = octetBytes[2]; 
ipv4asIpV6addr[15] = octetBytes[3]; 

controllare anche this

3

IPv6 è IPv4 compatibili.

IPv4 indirizzo: esempio 192.168.99.1

Fase 1>

dividere il primo ottetto (192) per 16 (dal Hex è un Base-16) IE: 192/16 = 12 volte esattamente con 0 lasciati liberi - 12 in esadecimale è rappresentato come C - 0 (zero) a Hex è, avete indovinato, 0 così 192 in HEX è C0

Step2>

Ripetere passaggio 1 con il secondo ottetto (168), IE: 168/16 = 10 volte con 8 rimanenza perché 10 * 6 = 160, - 10 in HEX è A - 8 in HEX è 8 Così 168 in esadecimale è A8

regole

Fase 3>

Ripetizione !!!Terzo ottetto (99) IE: 99/16 = 6 volte con 3 rimasto - 6 in esadecimale è 6 - 3 in HEX è 3 Così 99 in esadecimale è

Fase 4>

ultimo ottetto IE: 1/16 = 0 volte con 1 rimasti sopra - 0 in HEX è, sì è 0 - 1 in HEX è 1 Così 1 in HEX è

Così l'IPv4 indirizzo di 192.168.99.1, rappresentato nella porzione di indirizzo IPv6 sarebbe C0A8: 6301. Tuttavia è necessario utilizzare lettere minuscole e aggiungere tutti i dispersi byte IPv6, in modo che il codice corretto è:

:: c0a8: 6301

oppure è possibile utilizzare una sintassi ora sempre accettato:

:: 192.168.99.1

Così, alla fine di un indirizzo IPv6 può essere il vecchio indirizzo con le :: caratteri prima che il vecchio indirizzo.

Problemi correlati