在Linux

时间:2017-01-03 11:51:47

标签: linux gcc dns ipv6 libresolv

我正在尝试以编程方式检索IPv6 DNS服务器列表。目前我正在使用libresolv和下一个代码:

#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
}

根据resolv.h,res-&gt; _u._ext.nsaddrs字段应该包含一个带有所需地址的“struct sockaddr_in6 *”数组,但它包含一个NULL数组。

可以通过res-&gt; nsaddr_list字段访问IPv4 DNS服务器列表,但IPv6列表始终为空。我用Ubuntu和CentOS检查过这个。 IPv6配置正确。

1 个答案:

答案 0 :(得分:0)

您的代码似乎是正确的。最有可能res_ninit()未将任何IPv6 DNS服务器放入struct res_state,因为您的系统不知道任何内容。

尝试将以下行放入 /etc/resolv.conf

  

nameserver 2001:4860:4860 :: 8844