2

我正在考虑进行一个实验,以不同的方式跟踪 DNS 值(比如它们多久改变一次等等)。为此,我需要能够直接向服务器发出 DNS 请求,以便 1)我知道它来自哪个服务器,2)我可以请求来自多个服务器的响应,以及 3)我可以避免本地操作系统运行缓存.

有谁知道可以让我直接查询 DNS 服务器的库(按优先顺序排列的 C#、D、C、C++)?如果做不到这一点,有没有人知道我可以从中实现这样一个系统的 DNS 协议的易于理解的描述?

4

4 回答 4

3

对于 C,我会选择http://cr.yp.to/djbdns/blurb/library.html(如果您需要完全控制,即低级部分,即dns_transmit*和朋友) - 对于 C#,也许是http:// /www.c-sharpcorner.com/UploadFile/ivxivx/DNSClient12122005234612PM/DNSClient.aspx(现在无法测试那个,“也许”!)。

于 2009-05-25T17:56:54.670 回答
3

我只有 C 的经验,所以这是我的清单:

  • libresolv 是旧的、传统的和标准的方式。它在每个 Unix (type man 3 resolver) 上都可用,并且包括例程,例如 res_query可以或多或少地执行您想要的操作。要查询特定的名称服务器,您通常会更新全局变量_res.nsaddr_list(请注意,显然,它不适用于 IPv6)。

  • ldns是现代而闪亮的解决方案。你有很好的在线文档

  • 一个非常常见但显然未维护的库是adns

于 2009-05-26T07:28:53.063 回答
3

DNS 规范分布在许多 RFC中(请参阅漂亮的图表),我强烈建议不要从头开始实施存根解析器。有很多机会弄错。DNS 在过去几年中发展了很多。如果你既勇敢又疯狂,这里是最重要的 RFC:

  • RFC 1034,概念
  • RFC 1035,格式
  • RFC 2181,对规范的更新,以修复许多错误或歧义
  • RFC 2671,EDNS(今天强制)
  • RFC 3597,处理未知资源记录类型
  • 和许多其他人......
于 2009-05-26T07:33:46.047 回答
0

libdns(我认为它是绑定的一部分)。有一个 cygwin 端口可能对 Windows 环境有用。

http://rpm2html.osmirror.nl/libdns.so.21.html

于 2009-05-25T18:24:59.963 回答