【问题标题】:Programmatically obtain DNS servers of host以编程方式获取主机的 DNS 服务器
【发布时间】:2011-02-24 09:24:10
【问题描述】:

使用 C++,我想获取主机正在使用的三个操作系统的 DNS 服务器:OS X、FreeBSD 和 Windows。我想确认以下方法确实是最佳实践,如果不是,则是更好的选择。

提前感谢您的帮助!

【问题讨论】:

  • 在 Windows 上,更好的函数是GetAdaptersAddresses()。它会返回 IPv4 和 IPv6 地址,并为您提供大量其他信息。

标签: c++ cross-platform dns


【解决方案1】:

在许多 unix 系统(linux、bsd)上,您可以使用解析器函数来获取 DNS 服务器列表:man 3 resolver

在调用res_init() 之后,解析器结构被初始化。解析器结构存储您需要的所有信息。 DNS 服务器列表存储在结构条目nsaddr_list 中。

解析器结构的确切规范很可能在resolv.h 中找到。

使用解析器函数是获取 DNS 服务器列表的首选方式。 res_init() 很可能会用/etc/resolv.conf 中的信息填充解析器结构。

另见Use of resolv.h

【讨论】:

  • 是的,这似乎是通过 *nix API 获取 DNS 服务器的首选方式。谢谢!
  • 使用 res_ninit 和 res_nclose,不依赖全局状态变量。
  • res_ninit( ) 有什么好的替代方法吗?我看到了一些问题,例如 - stackoverflow.com/questions/49579030/…
猜你喜欢
  • 2012-02-02
  • 2016-02-03
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多