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.
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
und wo denken Sie, dass diese Liste gespeichert ist? Antwort ist 'resolv.conf'. –