在Java中将MacAddress转换为IPv6本地链路

在Java中将MacAddress转换为IPv6本地链路,java,mac-address,link-local,Java,Mac Address,Link Local,我需要将Mac地址转换为IPv6链接本地地址。 此链路本地IPv6是从NIC的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->5

我需要将Mac地址转换为
IPv6链接
本地地址。 此
链路本地IPv6
是从
NIC的
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
    中有方法来确定所讨论的地址是否是本地链接。

    有方法可以做到这一点。免责声明:我是该库的项目经理

    下面是使用示例MAC地址52:74:f2:b1:a8:7f的示例代码

    String str=“52:74:f2:b1:a8:7f”;
    试一试{
    MACAddress mac=新的MACAddress字符串(str).toAddress();
    ipv6地址linkLocal=mac.toLinkLocalIPv6();
    System.out.println(“将“+mac+”转换为IPv6链路本地“+linkLocal”);
    }catch(AddressStringe异常){
    //在此处处理无效的地址字符串
    }
    
    输出为:

    converted 52:74:f2:b1:a8:7f to IPv6 link local fe80::5074:f2ff:feb1:a87f
    
    wiki中有更多内容。

    有方法可以做到这一点。免责声明:我是该库的项目经理

    下面是使用示例MAC地址52:74:f2:b1:a8:7f的示例代码

    String str=“52:74:f2:b1:a8:7f”;
    试一试{
    MACAddress mac=新的MACAddress字符串(str).toAddress();
    ipv6地址linkLocal=mac.toLinkLocalIPv6();
    System.out.println(“将“+mac+”转换为IPv6链路本地“+linkLocal”);
    }catch(AddressStringe异常){
    //在此处处理无效的地址字符串
    }
    
    输出为:

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

    wiki中还有更多内容。

    实现了您自己的
    Inet6Address的生成器并使用了它?但我们仍然需要进行拆分、替换、重新连接、分组、转换和位反转。这似乎很符合逻辑。我很惊讶没有相同的实用程序。您有增强的字符串操作实用程序,如
    StringBuilder
    StringBuffer
    。实现您自己的
    Inet6Address
    生成器并使用?但我们仍然需要进行拆分、替换、重新连接、分组、转换和位反转。这似乎很符合逻辑。我很惊讶没有相同的实用程序。您有增强的字符串操作实用程序,如
    StringBuilder
    StringBuffer
    。很好的贡献,您的库是健壮的,经过了良好的测试。我投了更高的票,我认为这应该是被接受的答案,而不是试图用我提供的草稿来重新发明轮子。很好的贡献,你的库是健壮的,经过了很好的测试。我投了更高的票,我认为这应该是被接受的答案,而不是试图用我提供的草案重新设计轮子。