我知道DNS通常由操作系统处理,但我的工作是假设DNS已在目标系统上被破坏(这是诊断DNS配置错误的工具)。因此,我需要自己实现DNS,以检查我从系统对已知良好的DNS服务器返回的结果。
您可以使用NSLookup或Dig工具执行此操作,手动指定DNS服务器地址,但看起来Windows API要求执行此操作(例如GetAddressByName)不允许我指定要查询的服务器,改为使用系统配置的目标。
我试图在DNS上寻找RFC,但不幸的是它们对我来说很明显 - 它们使得HTTP规范看起来像是有史以来最清晰,编写最好的规范。
我也不想重新发明其他人之前已做过好几次的事情。
答案 0 :(得分:2)
您可以尝试:http://25thandclement.com/~william/projects/dns.c.html。另请参阅Need To Build Simple DNS Resolver in C
实际上,谷歌搜索“DNS解析器C”会发现几种可能性。
答案 1 :(得分:1)
http://www.vantage-points.org/libvdns.html
http://directory.fsf.org/project/FireDNS/
从未使用过这个,但也许这对你有帮助吗?
答案 2 :(得分:1)
我知道问题已经过时了,但我在这里找不到好的答案。 我发现poslib是最好的dns库,界面非常简单。
答案 3 :(得分:0)
尝试the c-ares library,据我了解它确实实现了自己的DNS堆栈。我在linux上成功使用它,他们说它支持Windows,虽然我自己没有尝试过。它不是C ++,只是普通的C,但你可以轻松地为它编写C ++包装器。
它获得异步的奖励积分,并提供钩子,通过它可以将它与现有的事件循环集成。
答案 4 :(得分:0)
djbdns包含您可以使用的DNS客户端库:
http://cr.yp.to/djbdns/dns.html
这与系统DNS解析程序库无关,并将生成正确的UDP数据包。如果你真的想变得聪明,可以将它与dnscache结合起来,或者查看dnstrace实用程序来解析根服务器的名称,看看究竟发生了什么。
当然,你需要让它在Windows上运行。不应该那么难。
答案 5 :(得分:0)
我建议libunbound
(与ldns
一起)是Unbound递归解析器附带的独立库。
它也具有DNSSEC验证支持,随着DNSSEC继续部署,它将变得非常有用。