如何将地址从IPv4转换为IPv6

Chr*_*ris 22 java ipv6

这可能吗?如何将ipv4转换为ipv6地址?

这里有几个例子:

0.0.0.0   -> ::
127.0.0.1 -> ::1
Run Code Online (Sandbox Code Playgroud)

我正在用Java搜索解决方案.

谢谢,

Yis*_*hai 30

没有有意义的IPv4到IPv6映射.像0.0.0.0和127.0.0.1这样的东西是规范中的特例,所以它们具有相同的含义.但是考虑到IPv4地址,它不会告诉您具体的IPv6地址是什么.您可以使用DNS查找来查看给定的IP地址是否解析为主机,而该主机除了IPv4地址之外还可以解析为IPv6地址,但DNS服务器必须配置为支持特定计算机的IP地址.

  • 在双栈系统中,实际上存在从IPv4到IPv6的映射,在:: ffff:XXXX:XXXX空间中; 这通常显示为":: ffff:192.168.1.1" - 因此在IPv6地址空间中有一个有意义的IPv4地址表示. (8认同)
  • 我不同意这种语气:我在几个应用程序中看到 IPv4 地址映射到 IPv6,其中开发人员希望将所有地址采用统一格式以进行排序、搜索等,无一例外都是 ::ffff:0:0 /96。我不知道它是否严格意义上有意义,但它确实有用。维基百科在权衡方面相当不错:https://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses (3认同)
  • @DoktorJ,我不认为这是个问题.我认为请求是针对正确的IP6地址,而不是在IP6堆栈上引用IP4地址的方法. (2认同)
  • @DoktorJ但除非你有一种路由设施,否则这种映射并不能真正帮助你. (2认同)

Dee*_*eep 19

混合双栈IPv6/IPv4实现通常支持特殊类别的地址,即IPv4映射地址.有关更多信息,请查看以下链接

http://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses

要将IPv4转换为映射的IPv6,可以使用以下命令:

String ip = "127.0.0.1"; 
String[] octets = ip.split("\\.");
byte[] octetBytes = new byte[4];
 for (int i = 0; i < 4; ++i) {
            octetBytes[i] = (byte) Integer.parseInt(octets[i]);
}

byte ipv4asIpV6addr[] = new byte[16];
ipv4asIpV6addr[10] = (byte)0xff;
ipv4asIpV6addr[11] = (byte)0xff;
ipv4asIpV6addr[12] = octetBytes[0];
ipv4asIpV6addr[13] = octetBytes[1];
ipv4asIpV6addr[14] = octetBytes[2];
ipv4asIpV6addr[15] = octetBytes[3];
Run Code Online (Sandbox Code Playgroud)

还检查一下


Zed*_*Zed 5

IPv6中曾经有一个用于IPv4地址的保留地址空间,您只需在其中添加96个0位的IPv4地址作为前缀.例如192.168.10.13 -> ::C0A8:0A0D.据我所知,这已被弃用,并且不再提供直接转换.

  • 我认为仍有IPv4映射的IPv6地址没有被弃用.你在这个方案中的例子是:: ffff:c0a8:0a0d.其中带有0的那个称为IPv4兼容的IPv6地址. (8认同)