【问题标题】:Cannot get IPv6 addresses returned from DNS64 (iOS)无法获取从 DNS64 (iOS) 返回的 IPv6 地址
【发布时间】:2023-03-23 10:35:02
【问题描述】:

鉴于 Apple 最近在 6 月份宣布所有新的移动应用程序都需要支持“仅 IPv6”,我正在使用他们的 DNS64/NAT64 设置(描述为here)来尝试测试我的应用程序。

我无法让 DNS64 在此设置下正常工作。特别是,当我尝试使用 getaddrinfo() 对任何地址进行 DNS 查找时,我得到 EAI_NONAME。这是我正在使用的确切代码:

struct addrinfo hints;
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_UNSPEC;    /* Allow IPv4 or IPv6 */
hints.ai_socktype = SOCK_STREAM; /* Stream socket */
hints.ai_flags = 0;
hints.ai_protocol = 0;          /* Any protocol */ 

int result;
struct addrinfo *addrinfo;

NSString *hostString = @"yahoo.com";

result = getaddrinfo([hostString UTF8String], NULL, &hints, &addrinfo);

if (result == 0) {
    NSLog(@"worked");
    struct sockaddr_storage stor = *( (struct sockaddr_storage *) addrinfo->ai_addr);
    NSLog(@" result = %@", [AppDelegate inet_ntoa_r:stor]);
}
else 
{
    NSLog(@"bad, error = %i (%@)", result, hostString);
}

我知道这段代码是正确的,因为当我切换到本地互联网提供商时,我实际上能够获得为 yahoo.com 返回的 IPv6 地址。但是,我认为这不是 Apple 正在寻找的“仅限 IPv6”的环境,所以我想让事情与他们的 NAT64/DNS64 一起工作。

为了验证,我在 App Store 上使用 IPv6 Toolkit App 进行了测试,并看到了相同的结果。

此时我认为 DNS64 需要一些额外的配置,但我不确定它会涉及什么。

编辑:通过此 DNS64 测试站点 test-ipv6 会出现错误“我们的测试表明您的 IPv6 设置会损坏或配置错误,这将导致网站启用 IPv6 时出现问题”。因此,Apple 的 DNS64 或我的配置肯定有问题。有什么想法吗?

【问题讨论】:

  • 它对我有用。您使用的是 iOS 9.2+ 吗?
  • 通常我将手机运行到我的 mac 热点并启用 mac 的 6to4 服务。你的设置是什么?

标签: ios iphone dns ipv6


【解决方案1】:
if (result == 0)
{
    NSLog(@"worked");
    struct sockaddr_storage stor = *( (struct sockaddr_storage *) addrinfo->ai_addr);

    //
    char host[1024];
    char serv[20];
    struct addrinfo * res = addrinfo;

    getnameinfo(res->ai_addr, sizeof(struct sockaddr), host, sizeof(host), serv, sizeof(serv), NI_NUMERICHOST | NI_NUMERICSERV);
    NSString * stringHost = [NSString stringWithUTF8String:host];
    NSString * stringPort = [NSString stringWithUTF8String:serv];

    NSString * string = [NSString stringWithFormat:@"%@: %@: %@", res->ai_family == AF_INET ? @"IPv4" : (res->ai_family == AF_INET6 ? @"IPV6" : @"Unknown"), stringHost, stringPort];
    NSLog(@"---- %@", string);  //IPV6: 64:ff9b::cebe:242d
}

【讨论】:

  • 当我运行我的代码时,我总是进入“错误”条件,所以你的代码永远不会运行。结果 = EAI_NONAME
猜你喜欢
  • 1970-01-01
  • 2013-08-24
  • 2014-08-31
  • 2013-08-20
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
相关资源
最近更新 更多