iOS - получить адрес DNS-сервера устройства в сети только IPv6

Я пытаюсь получить адрес DNS-сервера устройства при подключении к сети только IPv6 на iOS. Следующий код хорошо работает при подключении к сети IPv4, но не работает в сети IPv6. Код взят из этого ответа.

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");
    }
}

В сети IPv6 sin_family всегда равно AF_UNSPEC. Любые предложения/альтернативы?


person tonymontana    schedule 02.08.2015    source источник
comment
Вы решили это?   -  person Neelesh    schedule 20.07.2016
comment
@Нилеш Нет. Вместо этого я решил разрешить хосты с помощью CFHostStartInfoResolution вместо того, чтобы пытаться получить адрес DNS-сервера.   -  person tonymontana    schedule 20.07.2016
comment
@mrvincenzo см. stackoverflow.com/a/41303040/6782   -  person Alnitak    schedule 03.01.2017


Ответы (1)


Попробуйте использовать res._u._ext.nsaddrs для IPv6.

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

person Thiago Farina    schedule 18.08.2015