用于执行直接DNS查找的代码

时间:2009-05-25 17:50:36

标签: dns network-protocols

我正在考虑运行一个实验来以不同的方式跟踪DNS值(比如它们改变的频率和诸如此类的东西)。为此,我需要能够直接向服务器发出DNS请求,以便1)我知道它来自哪个服务器,2)我可以请求来自多个服务器的响应3)我可以避免本地OS运行缓存

有没有人知道我会直接查询DNS服务器的库(c#,D,C,C ++的优先顺序)?如果没有,那么有谁知道一个容易的了解我可以从?

实现这样一个系统的DNS协议的描述

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

  • libresolv是旧的,传统的和标准的方式。它可以在每个Unix(类型man 3 resolver)上使用,并包含类似的例程 res_query或多或少地做你想要的。要查询特定名称服务器,通常会更新全局变量_res.nsaddr_list(请注意,显然,does not work with IPv6)。

  • ldns是现代而有光泽的解决方案。您有good documentation online

  • 一个非常常见的图书馆,但显然没有维护,是adns

答案 2 :(得分:2)

DNS规范分布在很多 RFC上(请参阅nice graph),我强烈建议实施存根解析器刮。有很多机会弄错。 DNS在过去几年中发展了很多。如果你是勇敢和疯狂,这里是最重要的RFC:

  • RFC 1034,概念
  • RFC 1035,格式
  • RFC 2181,更新规范,修复许多错误或含糊不清
  • RFC 2671,EDNS(今日强制性)
  • RFC 3597,处理未知资源记录类型
  • 和其他许多人......

答案 3 :(得分:0)

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

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