我正在尝试从 Android 中的 IPv4 地址(在本机代码或 Java 本身中)合成 IPv6 地址,如RFC-7050中所述,以便在 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 网络。
示例:Internet -> IPv4 Only 网络-> NAT64 网络->客户端
客户端将具有RFC-4193下的本地 IPv6 地址(我相信),但只能通过其 NAT64 网关访问互联网,这意味着 NAT64 必须在将地址发送到上游之前对其进行转换。
所以我需要一种为合成的 IPv6 地址生成前缀的方法
理想情况下,我们需要合成一个 IPv6 地址才能到达 IPv4 端点。