2009-10-12 690 views

Respuesta

29

No hay IPv4 a IPv6 mapeado que sea significativa. cosas como 0.0.0.0 y 127.0.0.1 son casos especiales en la especificación, por lo que tienen un significado equivalente. Pero dada una dirección IPv4 no le dice nada acerca de cuál sería su dirección IPv6 específica. Puede usar una búsqueda DNS para ver si una dirección IP determinada se resuelve en un host que a su vez se resuelve en una dirección IPv6 además de una dirección IPv4, pero el servidor DNS debería configurarse para admitir eso para la máquina específica.

+5

En un sistema de doble pila, en realidad hay una asignación de IPv4 a IPv6, en el espacio :: ffff: XXXX: XXXX; esto se muestra típicamente como ":: ffff: 192.168.1.1"; por lo tanto, hay una representación significativa de las direcciones IPv4 en el espacio de direcciones IPv6. –

+1

@DoktorJ, no creo que esa fuera la pregunta. Creo que la solicitud fue para una dirección IP6 adecuada, no una forma de referenciar una dirección IP4 en una pila IP6. – Yishai

+1

@DoktorJ Pero a menos que tenga un tipo de facillity de enrutamiento, este mapeo realmente no lo ayuda. – glglgl

4

Solía ​​haber un espacio de direcciones reservado en IPv6 para direcciones IPv4, donde simplemente prefijaba la dirección IPv4 con 96 0 bits. P.ej. 192.168.10.13 -> ::C0A8:0A0D. Como sé que esto ha sido desaprobado, y ya no hay conversión directa disponible.

+7

Creo que todavía hay direcciones IPv6 mapeadas con IPv4 que no fueron desaprobadas. Su ejemplo en este esquema sería :: ffff: c0a8: 0a0d. El que tenía 0 se llamaba direcciones IPv6 compatibles con IPv4. –

15

Las implementaciones híbridas de doble pila IPv6/IPv4 suelen admitir una clase especial de direcciones, las direcciones mapeadas IPv4. Para obtener más comprobar el siguiente enlace:

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

para la conversión IPv4 a IPv6 asignada, puede utilizar el siguiente:

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]; 

también comprobar this

3

IPv6 es compatible con IPv4.

Un IPv4 dirección: ejemplo 192.168.99.1

Paso 1>

Divide el primer octeto (192) por 16 (desde Hex es una Base-16) IE : 192/16 = 12 veces exactamente con 0 sobra - 12 en hexadecimal se representa como C - 0 (cero) en Hex es, lo has adivinado, 0 de este modo 192 en hexadecimal es C0

Paso 2>

Repita el paso 1 con el segundo octeto (168), IE: 168/16 = 10 veces con 8 sobra porque 10 * 6 = 160, - 10 en HEX es A - 8 en hexadecimal es 8 Así 168 en hexadecimal es A8

reglas

Paso 3>

repetición !!!Tercer octeto (99) IE: 99/16 = 6 veces con 3 sobra - 6 en HEX es 6 - 3 en HEX es 3 lo tanto 99 en hexadecimal es

Step4>

último octeto IE: 1/16 = 0 veces con 1 sobra - 0 en HEX, sí es 0 - 1 en hexadecimal es 1 Así 1 en hexadecimal es

Así que el IPv4 Dirección de 192.168.99.1, representado en la porción de dirección IPv6 sería C0A8: 6301. Sin embargo, usted tiene que utilizar minúsculas y añadir todos los desaparecidos bytes IPv6, por lo que el código correcto es:

:: c0a8: 6301

o puede utilizar una sintaxis ahora siempre aceptado:

:: 192.168.99.1

Así que al final de una dirección IPv6 puede ser la dirección de edad con las :: caracteres antes de la antigua dirección.

Cuestiones relacionadas