Ho un'applicazione che utilizza indirizzi IPv4
(li memorizza quanto tempo), quindi comprende solo gli indirizzi IPv4
.Come posso convertire l'indirizzo IPV6 in indirizzo IPV4?
E 'possibile convertire l'indirizzo IPv6
in IPv4
con Java
?
Ho un'applicazione che utilizza indirizzi IPv4
(li memorizza quanto tempo), quindi comprende solo gli indirizzi IPv4
.Come posso convertire l'indirizzo IPV6 in indirizzo IPV4?
E 'possibile convertire l'indirizzo IPv6
in IPv4
con Java
?
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.
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.
un po 'googling mi ha portato al seguente post:
http://www.developerweb.net/forum/showthread.php?t=3434
Il codice fornito nel post è in C, ma non dovrebbe essere troppo difficile da riscrivere a Java.
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>
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.
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
Si prega di aggiornare la risposta fornendo il modo per convertire prima la vostra attenzione circa la compatibilità IPv4 IPv6 tp. – zeliboba