我在哪里可以找到C++ DNS库?

6
我知道DNS通常由操作系统处理,但我在工作时假设目标系统的DNS已经出现问题(这是一个诊断DNS配置错误的工具)。因此,我需要自己实现DNS,以检查从系统返回的结果与已知良好的DNS服务器的结果是否相符。
您可以使用NSLookup或Dig工具来执行此操作,并手动指定DNS服务器地址,但似乎Windows API调用(例如GetAddressByName)不允许我指定要查询的服务器,并使用系统配置的目标。
我尝试查找有关DNS的RFC文档,但不幸的是,它们对我来说非常晦涩难懂 - 它们使HTTP规范看起来像有史以来最清晰和最完整的规范。
我也不想重新发明已经被其他人多次完成的东西。

我不理解这个问题。DNS 可能被错误配置,但这并不是需要另一种 API 的原因。gethostbyname() 和相关函数仍然可以告诉您配置中的内容。 - user207421
@EJP:嗯,不是的,gethostbyname只进行查找。如果配置有误,它就会失败。没有编程方法可以告诉函数使用特定的DNS服务器。(不更改DNS的全局设置,但我不会为了解决本地问题而更改全局状态) - Billy ONeal
6个回答

2

2
尝试使用 c-ares库,据我所知它实现了自己的DNS栈。我已经在Linux上成功地使用过它,并且他们说它支持Windows,尽管我自己没有尝试过。它不是C++,只是普通的C语言,但你可以很容易地为它编写一个C++包装器。
它的优点在于异步性,并提供了钩子,可以将其与现有事件循环集成。

2

我知道这个问题很久远了,但是我在这里还没有找到对我有用的好答案。我发现poslib是最好的dns库,具有非常简单易用的界面。


1

1
我建议使用libunbound,它(与ldns一起)是Unbound递归解析器附带的独立库。它还支持DNSSEC验证,随着DNSSEC的不断部署,这将变得越来越有用。

详情请参见http://unbound.net/


0

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

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

这与系统DNS解析器库无关,将生成正确的UDP数据包。如果你真的想变得聪明,可以将其与dnscache结合使用,或查看dnstrace实用程序以从根服务器解析名称并查看实际情况。

当然,你需要让它在Windows上运行。这应该不难。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接