1

我正在尝试以编程方式检索 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->_u._ext.nsaddrs 字段应该包含一个带有所需地址的“struct sockaddr_in6 *”数组,但它包含一个 NULL 数组。

IPv4 DNS 服务器列表可通过 res->nsaddr_list 字段访问,但 IPv6 列表始终为空。我已经在 Ubuntu 和 CentOS 上检查过了。IPv6 配置正确。

4

1 回答 1

0

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

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

名称服务器 2001:4860:4860::8844

于 2017-01-03T12:51:07.240 回答