将 MacAddress 转换为 IPv6 Link 本地 Java

Convert MacAddress to IPv6 Link Local in Java

我需要将 Mac 地址转换为 IPv6 Link 本地地址。 这个link-local IPv6是从NIC’smac地址推断出来的。 转换过程如下。

  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. 添加 link-local 前缀:fe80::5074:f2ff:feb1:a87f

这似乎是很多特定的字符串操作和数字系统之间的转换。 我一直在 Java 中寻找一个实用程序 class,它可以帮助我以更有效的方式做同样的事情。 我看到 Java 在 InetAddress 中有方法来确定所讨论的地址是否是 link 本地地址。

IPAddress Java library 有方法可以做到这一点。免责声明:我是那个图书馆的项目经理。

这是使用您的示例 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

更多 examples 在 wiki 中。