2009-05-25 12 views
2

私はDNS値をさまざまな方法(変更頻度やその他)で追跡する実験を行っています。これを行うには、サーバーに直接DNS要求を行うことができるようにする必要があります。そのため、1)サーバーの種類を知っている、2)複数のサーバーから応答を要求できる、3)ローカルOSの実行キャッシュ。ダイレクトDNSルックアップを行うコード

誰でもライブラリ(c#、D、C、C++)をDNSサーバーに直接照会させることはできますか?それは誰でも、私はそのようなシステムを実装することができるDNSプロトコルの説明を理解しやすい知っていますか?

+0

host(1)のようなツールをラッピングするのは問題になりませんか? – Dave

+0

また、あなたのものではないDNSサーバーには賢明であることを忘れないでください。 – Dave

+0

私は一日に気付かれない数百の要求を見つけます。私はそれだけで私のブラウザから多くを実行するかもしれない – BCS

答えて

3

私はここに、唯一のCの経験を持っている私のリストです:

  • libresolvは、古い伝統的な標準的な方法です。これはすべてのUnix(タイプman 3 resolver)で利用可能であり、多かれ少なかれあなたが望むことを行う res_queryのようなルーチンを含んでいます。特定のネームサーバを照会するには、通常、グローバル変数_res.nsaddr_listを更新します(明らかに、それはdoes not work with IPv6です)。

  • ldnsは現代的で光沢のあるソリューションです。あなたはgood documentation onlineです。

  • 非常に共通のライブラリであるが、明らかに維持されていないのは、adnsです。

+0

+1のldns - それは私です私自身のコードで使用してください。 – Alnitak

+0

次に、新人のための素敵な例を提供するためにそれを公開することを忘れないでください:-) – bortzmeyer

+0

私はまもなくします! :) – Alnitak

3

Cの場合は、http://cr.yp.to/djbdns/blurb/library.html(完全なコントロールが必要な場合は低レベルの部品、つまりdns_transmit*と友人) - C#の場合はおそらくhttp://www.c-sharpcorner.com/UploadFile/ivxivx/DNSClient12122005234612PM/DNSClient.aspxです(現在、多分"!)。

+0

私はC#1 をダウンロードすることはできませんが、Cのものはこれまでのところよく見えます。 – BCS

+0

Cの1つはUnixのみです(私はこれで暮らすことができますが、それは私の最初の選択ではありません) – BCS

+0

djbライブラリは、IPv6のルックアップやNAPTRやSRVなどの任意のリソースコードの検索を行うことができないようです。 – bortzmeyer

0

libdns(私はそれがバインドの一部だと思う)。 Windows環境に便利なcygwinポートがあります。

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

+0

Windowsの世界では、DNSQuery()という素晴らしい機能があります http://msdn.microsoft.com/en-us/library/ms682016%28VS.85%29.aspx – Jason

2

DNS仕様はRFC多くのに広がっている(nice graphを参照)、私は強く、最初からスタブリゾルバを実装するないを助言します。間違ってしまう機会がたくさんあります。 DNSはここ数年で進化を遂げました。あなたは勇敢で狂っている場合は、ここで最も重要なRFCです:

  • RFC 1034、概念
  • RFC 1035形式
  • RFC 2181には、多くの誤りや曖昧
  • を修正するために、仕様にアップデート
  • RFC 2671、EDNS(必須今日)
  • RFC 3597、未知のリソースレコードタイプ
  • や他の多くを扱う...
+0

私は/それ/クレイジーではない! – BCS

関連する問題