【发布时间】:2019-05-14 14:11:37
【问题描述】:
我需要将 Mac 地址转换为 IPv6 Link 本地地址。
这个link-local IPv6 是从NIC’s mac 地址推断出来的。
转换过程如下。
取mac地址:例如
52:74:f2:b1:a8:7f在中间抛出 ff:fe:
52:74:f2:ff:fe:b1:a8:7f重新格式化为 IPv6 表示法
5274:f2ff:feb1:a87f将第一个八位字节从十六进制转换为二进制:
52 -> 01010010反转索引 6 处的位(从 0 开始计数):
01010010 -> 01010000将八位字节转换回十六进制:
01010000 -> 50用新计算的字节替换第一个八位字节:
5074:f2ff:feb1:a87f添加链接本地前缀:
fe80::5074:f2ff:feb1:a87f
这似乎是很多特定的字符串操作和数字系统之间的转换。
我一直在寻找 Java 中的实用程序类,它可以帮助我以更有效的方式做同样的事情。
我看到 Java 在InetAddress 中有方法来确定有问题的地址是否是本地链接。
【问题讨论】:
-
实现您自己的
Inet6Address构建器并使用Inet6Address#isLinkLocalAddress ? -
但我们仍然需要进行拆分、替换、重新加入、分组、转换和位反转。这似乎是很多逻辑。我很惊讶没有相同的实用程序。
-
您拥有增强的字符串操作实用程序,例如
StringBuilder或StringBuffer。
标签: java mac-address link-local