【问题标题】:Where can I find a C++ DNS Library?在哪里可以找到 C++ DNS 库?
【发布时间】:2011-07-19 22:46:20
【问题描述】:

我知道 DNS 通常由操作系统处理,但我假设目标系统上的 DNS 已损坏(这是诊断 DNS 配置错误的工具)。因此,我需要自己实现 DNS,以对照已知良好的 DNS 服务器检查从系统返回的结果。

您可以使用 NSLookup 或 Dig 工具执行此操作,手动指定 DNS 服务器地址,但执行此操作的 Windows API 调用(例如GetAddressByName)似乎不允许我指定要查询的服务器,并且改用系统配置的目标。

我试图寻找关于 DNS 的 RFC,但不幸的是,它们对我来说一清二楚——它们使 HTTP 规范看起来像是有史以来最清晰、编写得最好的规范。

我也不想重新发明别人已经做过几次的事情。

【问题讨论】:

  • 我不明白这个问题。 DNS 可能配置错误,但这不是需要替代 API 的理由。 gethostbyname() 和朋友还是会告诉你配置中的是什么
  • @EJP:呃,不,gethostbyname 只进行查找。如果配置错误,它只会失败。没有编程方式告诉函数使用所需的特定 DNS 服务器。 (不更改 DNS 的全局设置,但我不会更改全局状态来解决本地问题)

标签: c++ winapi dns


【解决方案1】:

你可以试试:http://25thandclement.com/~william/projects/dns.c.html。另见Need To Build Simple DNS Resolver in C

实际上,Google 搜索“DNS 解析器 C”揭示了几种可能性。

【讨论】:

    【解决方案2】:

    试试the c-ares library,据我了解,它确实实现了自己的 DNS 堆栈。我已经在linux上成功使用过,他们说它支持Windows,虽然我自己没有尝试过。它不是 C++,只是普通的 C,但你可以很容易地为它编写一个 C++ 包装器。

    它因异步而获得加分,并提供可以将其与现有事件循环集成的钩子。

    【讨论】:

      【解决方案3】:

      我知道这个问题很老,但我在这里没有找到适合我的答案。 我发现poslib 是最好的 dns 库,界面非常简单。

      【讨论】:

        【解决方案4】:

        【讨论】:

          【解决方案5】:

          我建议 libunbound(与 ldns 一起)是 Unbound 递归解析器中包含的独立库。

          它还支持 DNSSEC 验证,随着 DNSSEC 的不断部署,这将变得非常有用。

          http://unbound.net/

          【讨论】:

            【解决方案6】:

            djbdns 包含一个您可以使用的 DNS 客户端库:

            http://cr.yp.to/djbdns/dns.html

            这独立于系统 DNS 解析器库,将生成正确的 UDP 数据包。如果你真的想变得更聪明,你可以将它与 dnscache 结合使用,或者查看 dnstrace 实用程序来解析根服务器的名称,看看到底发生了什么。

            当然,您需要让它在 Windows 上运行。应该没那么难。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-05-17
              • 1970-01-01
              • 2013-10-17
              • 1970-01-01
              • 2022-11-24
              • 2021-01-13
              • 1970-01-01
              相关资源
              最近更新 更多