替代 glibc 库调用 res_ninit 以通过 DHCP 获取 DNS 详细信息

Alternative to glibc Library call res_ninit for getting DNS details over DHCP

有 API 替代 res_ninit 的好方法吗? 此调用存在问题,因为 res->_u.ext.nscount6res->nscount 未反映正确的数字。将 IPv6 地址添加到 /etc/resolv.conf 仍然会导致 nscount 在您预期 nscount6 增加的地方增加。

较旧的 glibc 版本似乎在 /etc/resolv.conf.

中增加了 IPv6 地址的 nscountnscount6

我目前正在直接解析 resolv.conf,因为我无法依赖 res_ninit 调用。但这对于手动 DNS 来说很好。

当谈到 DHCP DNS 时,我需要一个 API 来给我结果。没有其他方法(我能想到)通过 DHCP 确定 DNS IP 地址。

尝试在版块内的其他地方发帖,但目前无济于事。例如

res_ninitres_init 只从 /etc/resolv.conf 读取名称服务器信息。您始终可以通过自己解析 /etc/resolv.conf 并检查 nameserver 行来获得相同的数据名称服务器。如果没有 nameserver 行,将使用默认的 127.0.0.1

我认为没有必要为此提供 API,因为文件格式非常简单,可能 more 难以使用 API 而不是读取文件。

如果机器上没有本地缓存​​解析器 运行,则通过重写 /etc/resolv.conf 实现通过 DHCP 的名称服务器分配。用于此的确切机制是特定于发行版的,例如如果安装了 Debian,则使用 resolvconf

如果本地缓存解析器在系统上 运行(例如 dnsmasq 或 Unbound),则可以在该缓存解析器中直接配置基于 DHCP 的名称服务器。在这种情况下,/etc/resolv.conf 将继续指向相同的名称服务器,通常是通过列出 nameserver 127.0.0.1 或根本没有名称服务器信息(这是默认设置)。