0

我需要将 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. 添加链接本地前缀:fe80::5074:f2ff:feb1:a87f

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

4

1 回答 1

2

IPAddress Java 库具有执行此操作的方法。免责声明:我是那个图书馆的项目经理。

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

更多示例在 wiki 中。

于 2020-01-04T23:08:53.603 回答