2010-05-07 13 views

risposta

14

Mentre there are IPv6 equivalents for the IPv4 address range, non è possibile convertire tutti gli indirizzi IPv6 in IPv4: ci sono più indirizzi IPv6 che indirizzi IPv4.

L'unico modo per risolvere questo problema è aggiornare l'applicazione per poter comprendere e memorizzare gli indirizzi IPv6.

+2

Lo so, ma attualmente la maggior parte degli indirizzi è all'interno dello spazio IPV4. Ho solo bisogno di metodo per convertire quegli indirizzi che esistono nello spazio IPV4. – newbie

+0

Si prega di aggiornare la risposta fornendo il modo per convertire prima la vostra attenzione circa la compatibilità IPv4 IPv6 tp. – zeliboba

1

Non c'è una corrispondenza di 1-1 tra indirizzi IPv4 e IPv6 (né tra indirizzi IP e dispositivi), quindi ciò che si richiede generalmente non è possibile.

Esiste un particolare intervallo di indirizzi IPv6 che rappresentano effettivamente lo spazio degli indirizzi IPv4, ma gli indirizzi IPv6 generali non verranno da questo intervallo.

1

Ecco il codice che stai cercando in javascript. Beh sai, non è possibile convertire tutti i indirizzi 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 può compiere ciò che si sta descrivendo qui.

Gli indirizzi IPv6 sono 16 byte. Utilizzando tale libreria, se si inizia con una matrice di 16 byte è possibile costruire l'oggetto indirizzo IPv6:

IPv6Address addr = new IPv6Address(bytes); 

da lì si può verificare se l'indirizzo è mappato IPv4, IPv4 compatibile, IPv4 tradotto, e così via (ci sono molti modi possibili in cui IPv6 rappresenta gli indirizzi IPv4). Nella maggior parte dei casi, se un indirizzo IPv6 rappresenta un indirizzo IPv4, l'indirizzo ipv4 si trova nei 4 byte inferiori e quindi è possibile ottenere l'indirizzo IPv4 derivato come segue. Successivamente, puoi riconvertire in byte, che saranno solo 4 byte per IPv4.

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

javadoc è disponibile al collegamento.

Problemi correlati