我试图从安卓中的IPv6地址合成一个IPv4地址(无论是在本机代码中还是在Java本身中),就像RFC-7050中记录的那样,以便在NAT64后面使用。
在iOS中工作时,这个选项可以通过调用getaddrinfo来使用,但是,Android的getaddrinfo实现似乎只会合成主机名的IPv6,而不是IPv4地址。
在iOS上,而在NAT64后面,下面的代码将在变量res的地址列表中生成一个合成的IPv6地址。然而,在安卓上,相同的本地代码将生成一个IPv4地址,除非我将主机名而不是IPv4地址传递给getaddrinfo。
struct addrinfo *res;
getaddrinfo("x.x.x.x", "80", NULL, &res);编辑
我知道Android实现了CLAT/464 CLAT,但这并不能覆盖所有设备和网络。一个主要的例子是NAT64网络,它位于IPv4专用网络之后。 示例: -> IPv4 Only -> NAT64 Network -> Client 客户端将在RFC-4193下拥有一个本地的RFC-4193地址(我相信),但只能通过它的NAT64网关访问互联网,这意味着NAT64在将地址发送到上游之前必须翻译地址。 ,所以我需要一种为合成的IPv6地址生成前缀的方法 理想情况下,我们需要合成一个IPv6地址才能到达IPv4端点。
发布于 2017-08-09 05:50:48
这可能是你的答案,也可能不是你的答案:
你不需要合成Android上的地址。它有464 just,可以在IPv4网络上模拟一个NAT64堆栈,所以您的应用程序只需使用IPv4,安卓就可以处理幕后的映射。
iOS和Android的区别在于,Android在堆栈中实现了IPv4仿真。苹果公司决定,他们希望保持IP堆栈的干净,并为开发人员提供工具(如getaddrinfo),以便自己完成映射。不同的设计决策。
https://stackoverflow.com/questions/45579355
复制相似问题