【问题标题】:Retrieve IPv6 DNS servers list programmatically on Linux在 Linux 上以编程方式检索 IPv6 DNS 服务器列表
【发布时间】:2017-05-17 12:14:24
【问题描述】:

我正在尝试以编程方式检索 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 配置正确。

【问题讨论】:

    标签: linux gcc dns ipv6 libresolv


    【解决方案1】:

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

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

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

    【讨论】:

    • 我已经尝试过这种方法,忽略了 resolv.conf 不应该手动编辑并且没有帮助的事实。服务器从提供商的 DHCP 获取 DNS 服务器列表,并且它们被系统正确使用。
    • 你认为这个列表存储在哪里?答案是“resolv.conf”。
    猜你喜欢
    • 2018-09-09
    • 2012-02-02
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    相关资源
    最近更新 更多