2009-10-12 7 views

Répondre

29

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

+5

Dans un système à double pile, il existe en fait un mappage d'IPv4 vers IPv6, dans l'espace :: ffff: XXXX: XXXX; ceci est typiquement affiché comme ":: ffff: 192.168.1.1" - donc il y a une représentation significative des adresses IPv4 dans l'espace d'adresse IPv6. –

+1

@DoktorJ, je ne pense pas que c'était la question. Je pense que la demande était pour une adresse IP6 correcte, pas un moyen de référencer une adresse IP4 sur une pile IP6. – Yishai

+1

@DoktorJ Mais à moins d'avoir une sorte de facillité de routage, cette cartographie ne vous aide pas vraiment. – glglgl

4

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 bits 0. Par exemple. 192.168.10.13 -> ::C0A8:0A0D. Comme je sais, cela a été déprécié, et il n'y a plus de conversion directe disponible.

+7

Je pense qu'il existe toujours des adresses IPv6 mappées IPv4 qui n'étaient pas obsolètes. Votre exemple dans ce schéma serait :: ffff: c0a8: 0a0d. Celui avec des 0 était appelé adresses IPv6 compatibles IPv4. –

15

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 en savoir plus consulter le lien suivant:

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

Pour convertir IPv4 vers IPv6 mappée, 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 this

3

IPv6 est compatible IPv4.

Une adresse IPv4: exemple 192.168.99.1

step1>

Diviser le premier octet (192) par 16 (depuis Hex est un Base-16) IE: 192/16 = 12 fois exactement 0 à gauche sur - 12 Hex est représenté par C - 0 (zéro) dans Hex est, vous l'aurez deviné, 0 Ainsi 192 dans HEX est C0

Etape 2>

Répétez l'étape 1 avec le second octet (168), IE: 168/16 = 10 fois avec 8 à gauche sur parce que 10 * 6 = 160, - 10 HEX est un - 8 dans HEX est 8 Ainsi 168 HEX est A8

Etape 3>

règles de répétition !!!octet troisième (99) IE: 99/16 = 6 fois avec 3 à gauche sur - 6 dans HEX 6 est - 3 en 3 HEX est Ainsi, 99 dans HEX est

Step4>

octet Dernière IE: 1/16 = 0 fois avec 1 à gauche sur - 0 en HEX est, oui, il est 0 - 1 HEX est 1 Ainsi 1 HEX est

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

:: c0a8: 6301

ou vous pouvez utiliser une syntaxe maintenant toujours acceptée:

:: 192.168.99.1

Ainsi, à la fin d'une adresse IPv6 peut être l'ancienne adresse avec les :: avant l'ancienne chars adresse.

Questions connexes