glibc库调用res_ninit的替代方法,用于通过DHCP获取DNS详细信息

时间:2019-02-27 07:19:55

标签: dns glibc resolve

是否有res_ninit的API替代品? 此通话存在问题,因为res->_u.ext.nscount6res->nscount不能反映正确的数字。向/etc/resolv.conf添加IPv6地址仍然会导致nscount增加,而您原本希望nscount6增加。

对于nscount中的IPv6地址,较早的glibc版本似乎同时增加了nscount6/etc/resolv.conf

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

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

尝试在董事会中的其他地方发布信息,但到目前为止没有帮助。例如

Retrieve IPv4 and IPv6 nameservers programmatically

1 个答案:

答案 0 :(得分:1)

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

我认为没有必要为此提供API,因为文件格式非常简单,使用API​​可能比读取文件困难得多。

> 如果在计算机上没有本地缓存​​解析器,则通过重写/etc/resolv.conf来实现通过DHCP的

名称服务器分配。用于此目的的确切机制是特定于分发的,例如Debian使用resolvconf(如果已安装)。

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