如何将地址从IPv4转换为IPv6

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

这里有几个例子:

0.0.0.0 -> :: 127.0.0.1 -> ::1 

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

谢谢,

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

混合双栈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]; 

还要检查一下

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

IPv6与IPv4兼容。

IPv4地址:示例192.168.99.1

Step1>

将第一个八位位组(192)除以16(因为hex是一个基数为16)IE:192/16 = 12次正好,剩下的0 – hex中的12表示为C – 0(零)在hex中,你猜对了它,因此HEX中的192是C0

Step2>

用第二个八位位组(168)重复步骤1,IE:168/16 = 10次,剩下8个因为10 * 6 = 160,HEX中的-10是HEX中的A – 8是8因此HEX中的168是A8

Step3>

重复规则!!! 第三个八位字节(99)IE:99/16 = 6次,其中3个剩余 – 6个在HEX中6 – 3在HEX中是3因此在HEX中是99个是63

Step4>

最后一个八位字节IE:1/16 = 0次,剩下1个 – 在hex中是0,是的它是0 – 1在HEX中是1因此在HEX中是1是01

因此,在IPv6地址部分中表示的IPv4地址192.168.99.1将是C0A8:6301 。 但是,您必须使用小写并添加所有丢失的字节IPv6,因此正确的代码是:

:: c0a8:6301

或者您可以使用现在始终接受的语法:

:: 192.168.99.1

因此,最终IPv6地址可以是旧地址,在旧地址之前使用:: chars。

有许多方法可以将IPv4映射到IPv6。 对于大多数此类方法,转换后的IPv4地址位于16字节IPv6地址的低4字节中。

IPAddress Java库具有协助许多将IPv4转换为IPv6的最常用方法的方法。 免责声明:我是该图书馆的项目经理。

例如,给定IPv4地址,您可以使用IPv6映射转换转换为IPv6,如图所示:

 IPv6Address ipv6Address = new IPAddressString("1.2.3.4").getAddress().toIPv4(). getIPv4MappedAddress().toIPv6(); System.out.println(ipv6Address); // ::ffff:102:304 System.out.println(ipv6Address.toMixedString()); // ::ffff:1.2.3.4 

使用IPv6Address实例,您可以检查地址是IPv4映射,IPv4兼容,IPv4转换等等(这些是IPv6表示IPv4地址的许多可能方式)。 之后,您可以转换回IPv4。

 if(addr.isIPv4Compatible() || addr.isIPv4Mapped()) { IPv4Address derivedIpv4Address = ipv6Address.getLowerIPv4Address(); byte ipv4Bytes[] = ipv4Address.getBytes(); ... }