Преобразование MacAddress в локальную ссылку IPv6 в Java

Мне нужно преобразовать Mac-адрес в IPv6 Link локальный адрес. Этот link-local IPv6 выводится из NIC’s mac-адреса. Процедура преобразования приведена ниже.

  1. взять mac адрес: например 52:74:f2:b1:a8:7f

  2. кинуть ff:fe в середину: 52:74:f2:ff:fe:b1:a8:7f

  3. переформатировать в нотацию IPv6 5274:f2ff:feb1:a87f

  4. преобразовать первый октет из шестнадцатеричного в двоичный: 52 -> 01010010

  5. инвертировать бит с индексом 6 (считая с 0): 01010010 -> 01010000

  6. преобразовать октет обратно в шестнадцатеричный: 01010000 -> 50

  7. замените первый октет новым вычисленным: 5074:f2ff:feb1:a87f

  8. добавьте префикс локальной ссылки: fe80::5074:f2ff:feb1:a87f

Кажется, это много специфических манипуляций со строками и преобразования между системами счисления. Я искал служебный класс на Java, который мог бы помочь мне сделать то же самое более эффективным способом. Я вижу, что в Java есть методы InetAddress, чтобы определить, является ли рассматриваемый адрес локальной ссылкой.

Реализуете свой собственный конструктор Inet6Address и используете Inet6Address#isLinkLocalAddress?

Paul 14.05.2019 16:18

Но нам все равно нужно будет выполнять разбиение, замену, повторное объединение, группировку, преобразование и инверсию битов. Кажется, много логики. Я удивлен, что нет утилиты для того же.

K-ous 14.05.2019 17:46

У вас есть расширенные утилиты для работы со строками, такие как StringBuilder или StringBuffer.

Paul 14.05.2019 18:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
504
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У Java-библиотека IP-адреса есть методы для этого. Отказ от ответственности: я руководитель проекта этой библиотеки.

Вот пример кода с использованием вашего примера MAC-адреса 52:74:f2:b1:a8:7f

   String str = "52:74:f2:b1:a8:7f";
   try {
      MACAddress mac = new MACAddressString(str).toAddress();
      IPv6Address linkLocal = mac.toLinkLocalIPv6();
      System.out.println("converted " + mac + " to IPv6 link local " + linkLocal);
   } catch(AddressStringException e) {
      // handle invalid address string here
   }

Выход:

converted 52:74:f2:b1:a8:7f to IPv6 link local fe80::5074:f2ff:feb1:a87f

Больше Примеры есть в вики.

Хороший вклад, ваша библиотека надежна и хорошо протестирована. Я проголосовал за, и я думаю, что это должен быть принятый ответ, вместо того, чтобы пытаться изобретать велосипед с черновиком, который я предоставил.

Paul 06.01.2020 10:12

Другие вопросы по теме