2016-05-17 84 views
-1

鉴于苹果最近宣布所有新的移动应用都需要在6月份支持“仅IPv6”,我正在使用他们的DNS64/NAT64设置(描述为here)尝试测试我的应用。无法获得从DNS64(iOS)返回的IPv6地址

我无法让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地址返回。然而,我不认为这是苹果公司正在寻找的“仅IPv6”环境,所以我想用他们的NAT64/DNS64解决问题。

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

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

编辑:通过这个DNS64测试网站test-ipv6给出错误“我们的测试表明,你将有一个错误或配置错误的IPv6设置,这将导致问题,因为网站启用Ipv6”。所以苹果的DNS64或我的配置肯定有问题。有任何想法吗?

+0

它适用于我。你在使用iOS 9.2+吗? – user102008

回答

-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 
} 
+0

当我运行我的代码时,我总是进入“错误”条件,所以你的代码永远不会运行。结果= EAI_NONAME – Locksleyu