2010-05-07 91 views

Respuesta

14

Mientras there are IPv6 equivalents for the IPv4 address range, no puede convertir todas las direcciones IPv6 a IPv4: hay más direcciones IPv6 que direcciones IPv4.

La única forma razonable de solucionar este problema es actualizar la aplicación para poder comprender y almacenar las direcciones IPv6.

+2

Lo sé, pero actualmente la mayoría de las direcciones están dentro del espacio IPV4. Solo necesito un método para convertir esas direcciones que existen en el espacio IPV4. – newbie

+0

Actualice su respuesta, brindando la manera de realizar conversiones antes de su advertencia sobre la compatibilidad con IPv6 tp IPv4. – zeliboba

1

No hay una correspondencia 1-1 entre las direcciones IPv4 e IPv6 (ni entre las direcciones IP y los dispositivos), por lo que lo que está pidiendo generalmente no es posible.

Existe un rango particular de direcciones IPv6 que realmente representan el espacio de direcciones IPv4, pero las direcciones IPv6 generales no serán de este rango.

1

Aquí está el código que está buscando en javascript. Bien se sabe que no permitirá la conversión de las direcciones IPv6

<script> 
function parseIp6(str) 
{ 
    //init 
    var ar=new Array; 
    for(var i=0;i<8;i++)ar[i]=0; 
    //check for trivial IPs 
    if(str=="::")return ar; 
    //parse 
    var sar=str.split(':'); 
    var slen=sar.length; 
    if(slen>8)slen=8; 
    var j=0; 
    for(var i=0;i<slen;i++){ 
    //this is a "::", switch to end-run mode 
    if(i && sar[i]==""){j=9-slen+i;continue;} 
    ar[j]=parseInt("0x0"+sar[i]); 
    j++; 
    } 

    return ar; 
} 
function ipcnvfrom6(ip6) 
{ 
    var ip6=parseIp6(ip6); 
    var ip4=(ip6[6]>>8)+"."+(ip6[6]&0xff)+"."+(ip6[7]>>8)+"."+(ip6[7]&0xff); 
    return ip4; 
} 
alert(ipcnvfrom6("::C0A8:4A07")); 
</script> 
4

The IPAddress Java library puede lograr lo que usted está describiendo aquí.

Las direcciones IPv6 son de 16 bytes. El uso de esa biblioteca, si usted está comenzando con una matriz de 16 bytes se puede construir la dirección del objeto IPv6:

IPv6Address addr = new IPv6Address(bytes); 

Desde allí se puede comprobar si la dirección está asignada IPv4, compatible con IPv4, IPv4 traducido, etc. (hay muchas formas posibles en que IPv6 representa las direcciones IPv4). En la mayoría de los casos, si una dirección IPv6 representa una dirección IPv4, la dirección IPv4 se encuentra en los 4 bytes inferiores, por lo que puede obtener la dirección IPv4 derivada de la siguiente manera. Después, puede convertir de nuevo a bytes, que serán solo 4 bytes para IPv4.

if(addr.isIPv4Compatible() || addr.isIPv4Mapped()) { 
    IPv4Address derivedIpv4Address = ipv6Address.getLowerIPv4Address(); 
    byte ipv4Bytes[] = ipv4Address.getBytes(); 
    ... 
} 

El javadoc está disponible en el enlace.

Cuestiones relacionadas