web-dev-qa-db-fra.com

Comment convertir une adresse IPv4 en IPv6

Est-ce possible? Comment convertir un ipv4 en adresse ipv6?

quelques exemples d'ici:

0.0.0.0   -> ::
127.0.0.1 -> ::1

Je recherche une solution en Java.

Merci,

22
Chris

Aucun mappage IPv4 vers IPv6 n'est significatif. des choses comme 0.0.0.0 et 127.0.0.1 sont des cas spéciaux dans la spécification, donc ils ont une signification équivalente. Mais étant donné une adresse IPv4, il ne vous dit rien sur ce que serait son adresse IPv6 spécifique. Vous pouvez utiliser une recherche DNS pour voir si une adresse IP donnée se résout en un hôte qui à son tour se résout en une adresse IPv6 en plus d'une adresse IPv4, mais le serveur DNS devra être configuré pour prendre en charge cela pour la machine spécifique.

30
Yishai

Les implémentations hybrides IPv6/IPv4 à double pile prennent généralement en charge une classe spéciale d'adresses, les adresses mappées IPv4. Pour plus d'informations, consultez le lien suivant:

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

Pour convertir IPv4 en IPv6 mappé, vous pouvez utiliser les éléments suivants:

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

Vérifiez également ceci

19
Deep

Il y avait un espace d'adressage réservé dans IPv6 pour les adresses IPv4, où vous préfixiez simplement l'adresse IPv4 avec 96 0 bits. Par exemple. 192.168.10.13 -> ::C0A8:0A0D. Comme je sais, cela est obsolète et il n'y a plus de conversion directe disponible.

5
Zed

IPv6 est compatible IPv4.

Une adresse IPv4: exemple 192.168.99.1

Étape 1>

Divisez le premier octet (192) par 16 (puisque Hex est un Base-16) IE: 192/16 = 12 fois exactement avec 0 restant - 12 en Hex est représenté par C - 0 (zéro) dans Hex est, vous l'avez deviné, 0 Ainsi 192 dans HEX est C

Étape 2>

Répétez l'étape 1 avec le deuxième octet (168), IE: 168/16 = 10 fois avec 8 restants car 10 * 6 = 160, - 10 en HEX est A - 8 en HEX est 8 Ainsi 168 dans HEX est A8

Étape 3>

Règles de répétition !!! Troisième octet (99) IE: 99/16 = 6 fois avec 3 restants - 6 en HEX est 6-3 en HEX est 3 Ainsi 99 en HEX est 6 =

Étape 4>

Dernier octet IE: 1/16 = 0 fois avec 1 restant - 0 en HEX est, oui c'est 0 - 1 en HEX est 1 Donc 1 en HEX est 1

Ainsi, l'adresse IPv4 de 192.168.99.1, représentée dans la partie d'adresse IPv6 serait C0A8: 6301. Cependant, vous devez utiliser des minuscules et ajouter tous les octets manquants IPv6, le code correct est donc:

:: c0a8: 6301

ou vous pouvez utiliser une syntaxe désormais toujours acceptée:

:: 192.168.99.1

Donc, à la fin, une adresse IPv6 peut être l'ancienne adresse avec les caractères :: avant l'ancienne adresse.

3
MaxV