从Android上的IPv4地址合成IPv4映射的IPv6地址?

时间:2017-08-08 23:15:06

标签: android ipv6 ipv4 multihomed

我尝试从Android中的IPv4地址(本机代码或Java本身)合成IPv6地址,如RFC-7050中所述,以便在NAT64后面使用。

在iOS中工作时,通过调用getaddrinfo可以使用此选项,但似乎Android getaddrinfo的实现只会为主机名而不是IPv4地址合成IPv6。

在iOS上,在NAT64之后,以下代码将在变量res的地址列表中生成合成的IPv6地址。但是,在Android上,相同的本机代码将生成IPv4地址,除非我将主机名而不是IPv4地址传递给getaddrinfo

struct addrinfo *res;
getaddrinfo("x.x.x.x", "80", NULL, &res);

修改

  

我知道Android实现了CLAT / 464lat,但这并不能涵盖所有设备和网络。一个主要的例子是仅支持IPv4的网络背后的NAT64网络。

     

示例:互联网 - > 仅限IPv4的网络 - > NAT64网络 - >的客户端

     

客户端将拥有RFC-4193下的本地IPv6地址(我相信),但只能通过它的NAT64网关访问互联网,这意味着NAT64必须在发送之前转换地址上游。

     

所以我需要的是一种为合成的IPv6地址生成前缀的方法

     

理想情况下,我们需要合成IPv6地址才能到达IPv4端点。

1 个答案:

答案 0 :(得分:2)

这可能是也可能不是你的答案:

您不需要在Android上合成地址。它有464xlat模拟NAT64网络上的IPv4堆栈,因此您的应用程序可以使用IPv4,Android将负责幕后的映射。

iOS和Android之间的区别在于Android在堆栈中实现了IPv4仿真。 Apple决定让他们保持IP堆栈的清洁,并为开发人员提供工具(如getaddrinfo)来自行进行映射。不同的设计决定。