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

从Android上的IPv4地址合成IPv4映射的IPv6地址?,android,ipv6,ipv4,multihomed,Android,Ipv6,Ipv4,Multihomed,我正试图从Android中的IPv4地址(本机代码或Java本身)合成一个IPv6地址,如中所述,以便在NAT64之后使用 在iOS中工作时,通过调用getaddrinfo可以使用此选项,但是Android的getaddrinfo实现似乎只会合成主机名的IPv6,而不会合成IPv4地址 在iOS上,在NAT64之后,以下代码将在变量res的地址列表中生成合成的IPv6地址。但是,在Android上,相同的本机代码将生成IPv4地址,除非我将主机名而不是IPv4地址传递给getaddrinfo s

我正试图从Android中的IPv4地址(本机代码或Java本身)合成一个IPv6地址,如中所述,以便在NAT64之后使用

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

在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网络->客户端

客户端将有一个本地IPv6地址(我相信),但只能通过它的NAT64网关访问internet,这意味着NAT64必须在向上游发送地址之前转换地址

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

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


这可能是您的答案,也可能不是:

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


iOS和Android的区别在于Android在堆栈中实现了IPv4仿真。苹果公司决定,他们希望保持IP堆栈干净,并为开发人员提供工具(如
getaddrinfo
)来自己进行映射。不同的设计决策。

据我所知,464xlat的实施无法通过WiFi工作。在仅IPv4的上游网络后面存在使用NAT64的网络。i、 e.
互联网->仅IPv4网络->NAT64网络->客户端
,我试图解释这种情况。