【发布时间】:2017-08-08 23:15:05
【问题描述】:
我正在尝试根据RFC-7050 中记录的 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 网络。
示例:Internet -> 仅 IPv4 网络 -> NAT64 网络 -> 客户端
客户端将在RFC-4193 下拥有一个本地 IPv6 地址(我相信),但只能通过其 NAT64 网关访问互联网,这意味着 NAT64 必须在将地址发送到上游之前对其进行转换。
所以我需要一种为合成的 IPv6 地址生成前缀的方法
理想情况下,我们需要合成一个 IPv6 地址才能到达 IPv4 端点。
【问题讨论】:
标签: android ipv6 ipv4 multihomed