iOS - Get device's DNS server address on IPv6 only network

左心房为你撑大大i 提交于 2019-12-08 08:20:48

问题


I am trying to get device's DNS server address while connected to IPv6 only network on iOS. The following code works well for when connected to IPv4 network but doesn't work on IPv6 network. Code taken from this answer.

res_ninit(&_res);
res_state res = &_res;

for (int i=0; i < res->nscount; i++) {
    sa_family_t family = res->nsaddr_list[i].sin_family;

    if (family == AF_INET) {
      NSLog(@"IPv4");
      char str[INET_ADDRSTRLEN]; // String representation of address
      inet_ntop(AF_INET, & (res->nsaddr_list[i].sin_addr.s_addr), str, INET_ADDRSTRLEN);
    } else if (family == AF_INET6) {
      NSLog(@"IPv6");
      char address[INET6_ADDRSTRLEN]; // String representation of address
      inet_ntop(AF_INET6, &(res->nsaddr_list [i].sin_addr.s_addr), address, INET6_ADDRSTRLEN);
    } else {
      NSLog(@"Unspecified");
    }
}

On IPv6 network, sin_family is always AF_UNSPEC. Any suggestions/alternatives?


回答1:


Try using res._u._ext.nsaddrs for IPv6.

See https://chromium.googlesource.com/chromium/src/+/master/net/dns/dns_config_service_posix.cc#437



来源:https://stackoverflow.com/questions/31768886/ios-get-devices-dns-server-address-on-ipv6-only-network

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!