2017-01-03 2 views
1

Ich versuche, eine Liste der IPv6-DNS-Server programmgesteuert abzurufen. Derzeit verwende ich libresolv und nächsten Code:Abrufen IPv6 DNS-Server-Liste programmgesteuert unter Linux

#include <stdio.h> 
#include <netinet/in.h> 
#include <resolv.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int argc, char** argv) 
{ 
    res_state res = malloc(sizeof(struct __res_state)); 
    res_ninit(res); 

    printf("%p\n", res->_u._ext.nsaddrs[0]); // (nil) here 
} 

Nach resolv.h, res -> _ u._ext.nsaddrs Feld ein Array von enthalten sollte "struct sockaddr_in6 *" mit den benötigten Adressen, aber es enthält ein Array von NULL.

IPv4-DNS-Server-Liste ist über res-> nsaddr_list-Feld zugänglich, aber IPv6-Liste ist immer leer. Ich habe das sowohl mit Ubuntu als auch mit CentOS überprüft. IPv6 ist korrekt konfiguriert.

Antwort

0

Ihr Code scheint korrekt zu sein. Am wahrscheinlichsten res_ninit() setzt keine IPv6-DNS-Server in die struct res_state, weil Ihr System nichts davon kennt.

Versuchen Sie, die folgende Zeile in Ihre /etc/resolv.conf zu setzen:

Name-Server 2001: 4860: 4860 :: 8844

+0

ich diesen Ansatz versucht haben, ignoriert die Tatsache, Diese resolv.conf sollte nicht manuell bearbeitet werden und es hilft nicht. Der Server ruft eine Liste der DNS-Server vom DHCP des Anbieters ab und sie werden vom System korrekt verwendet. – Vsevolod

+0

und wo denken Sie, dass diese Liste gespeichert ist? Antwort ist 'resolv.conf'. –