Подтвердить что ты не робот

Как конвертировать адрес из IPv4 в IPv6

Возможно ли это? Как вы можете преобразовать ipv4 в адрес ipv6?

несколько примеров отсюда:

0.0.0.0   -> ::
127.0.0.1 -> ::1

Я ищу решение на Java.

Спасибо,

4b9b3361

Ответ 1

Нет сопоставления IPv4-IPv6, которое имеет смысл. такие вещи, как 0.0.0.0 и 127.0.0.1, являются особыми случаями в спецификации, поэтому они имеют эквивалентное значение. Но, учитывая адрес IPv4, он ничего не сообщает о том, каким будет его конкретный адрес IPv6. Вы можете использовать поиск DNS, чтобы узнать, разрешает ли данный IP-адрес хосту, который, в свою очередь, разрешает адрес IPv6 в дополнение к IPv4-адресу, но DNS-сервер должен быть настроен для поддержки этого для конкретной машины.

Ответ 2

Гибридные двухуровневые реализации IPv6/IPv4 обычно поддерживают специальный класс адресов, IPv4-отображаемых адресов. Для получения дополнительной информации проверьте следующую ссылку:

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

Для преобразования IPv4 в сопоставленный IPv6 вы можете использовать следующее:

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

Также проверьте this

Ответ 3

В IPv6 для IPv4-адресов было зарезервированное адресное пространство, где вы просто префикс IPv4-адреса составляли 96 0-бит. Например. 192.168.10.13 -> ::C0A8:0A0D. Поскольку я знаю, что это было устаревшим, и там больше нет прямого преобразования.

Ответ 4

IPv6 совместим с IPv4.

Адрес IPv4: пример 192.168.99.1

Шаг1 >

Разделите первый октет (192) на 16 (поскольку Hex - это Base-16) IE: 192/16 = 12 раз ровно с 0 слева - 12 в Hex представлен как C - 0 (ноль) в Hex, как вы уже догадались, 0 Таким образом, 192 в HEX C0

Шаг2 >

Повторите шаг 1 со вторым октетом (168), IE: 168/16 = 10 раз с 8 оставшимися, потому что 10 * 6 = 160, - 10 в HEX - это A - 8 в HEX - 8 Таким образом, 168 в HEX A8

Шаг 3 >

Правила повторения!!! Третий октет (99) IE: 99/16 = 6 раз с 3 оставшимися - 6 в HEX - 6 - 3 в HEX - 3 Таким образом, 99 в HEX 63

Шаг4 >

Последний октет IE: 1/16 = 0 раз с 1 слева - 0 в HEX есть, да 0 - 1 в HEX - 1 Таким образом, 1 в HEX 01

Таким образом, IPv4-адрес 192.168.99.1, представленный в части адреса IPv6, будет C0A8: 6301. Однако вам нужно использовать строчные буквы и добавить все отсутствующие байты IPv6, поэтому правильный код:

:: c0a8: 6301

или вы можете использовать синтаксис, который теперь всегда принимается:

:: 192.168.99.1

Таким образом, в конце адрес IPv6 может быть старым адресом с символами :: до старого адреса.

Ответ 5

Существует множество способов сопоставления IPv4 и IPv6. Для большинства таких методов преобразованный адрес IPv4 помещается в младшие 4 байта 16-байтового адреса IPv6.

В библиотеке Java IPAddress есть методы, помогающие справиться со многими из наиболее распространенных способов преобразования IPv4 в IPv6. Отказ от ответственности: я руководитель проекта этой библиотеки.

Например, учитывая IPv4-адрес, вы можете преобразовать его в IPv6, как показано, используя преобразование IPv6-преобразования:

IPv6Address ipv6Address = new IPAddressString("1.2.3.4").getAddress().toIPv4().
    getIPv4MappedAddress().toIPv6();
System.out.println(ipv6Address); // ::ffff:102:304
System.out.println(ipv6Address.toMixedString()); // ::ffff:1.2.3.4

С помощью экземпляра IPv6Address вы можете проверить, сопоставлен ли адрес IPv4, совместим с IPv4, переведен IPv4 и т.д. (Это некоторые из многих возможных способов, которыми IPv6 представляет адреса IPv4). После этого вы можете преобразовать обратно в IPv4.

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

Ответ 6

Вот код преобразования в Javascript

/** IPV4 CIDR to IPV6 CIDR conversion **/
function covertIPv6(x){
let ipV4 = x;
let address = ipV4.split('/');
let classValues = [];

if(address.length){
  classValues = address[0].split('.');
}
if(classValues.length){  
  let str = classValues.reduce((acc, val, ind)=>{
    let mod = +val >= 16 ? +val%16 : +val;
    let divider = +val >= 16 ? (val-mod)/16 : 0;
    const hexaCode = (hexaVal)=>{
      switch(hexaVal){
      case 10:
        hexaVal = 'A';
        break;
      case 11:
        hexaVal = 'B';
        break;
      case 12:
        hexaVal = 'C';
        break;
      case 13:
        hexaVal = 'D';
        break;
      case 14:
        hexaVal = 'E';
        break;
      case 15:
        hexaVal = 'F';
        break;
      default:
        hexaVal = hexaVal;
        break;
    }
      return hexaVal;
    }
    mod = hexaCode(mod);
    divider = hexaCode(divider);
    return ind === 1 ? '${acc}${divider}${mod}:':'${acc}${divider}${mod}'
  },'')
  return '2002:${str}::/${address[1]}';
}
  return "Invalid Address";
}

// Run the function

console.log(covertIPv6("0.0.0.0/12"));