2009-05-25 5 views
2

Ich denke daran, ein Experiment auszuführen, um DNS-Werte auf verschiedene Arten zu verfolgen (z. B. wie oft sie sich ändern und was nicht). Um dies zu tun, muss ich in der Lage sein, eine DNS-Anfrage direkt an einen Server zu richten, so dass ich weiß, von welchem ​​Server es kam, 2) ich kann Antworten von mehreren Servern anfordern und 3) den lokalen Betriebssystem-Cache umgehen kann .Code für eine direkte DNS-Suche

Kennt jemand eine Bibliothek (C#, D, C, C++ in dieser Reihenfolge der Präferenz), die mich direkt einen DNS-Server abfragen lassen? Fehlt das, weiß jemand eine leicht verständliche Beschreibung des DNS-Protokolls, von dem ich ein solches System implementieren könnte?

+0

Ein Wrapping eines Tools wie Host (1) kommt nicht in Frage? – Dave

+0

Denken Sie auch daran, nett zu DNS-Servern zu sein, die nicht Ihnen gehören. – Dave

+0

Ich denke ein paar hundert Anfragen pro Tag würden nicht einmal bemerkt werden. Ich könnte so viele von meinem Browser allein – BCS

Antwort

3

Ich habe Erfahrung nur mit C, also hier ist meine Liste:

  • libresolv ist die alte, traditionelle und Standard-Weg. Es ist auf jedem Unix verfügbar (Typ man 3 resolver) und enthält Routinen wie res_query, die mehr oder weniger was Sie wollen. Um einen bestimmten Nameserver abzufragen, aktualisieren Sie in der Regel die globale Variable _res.nsaddr_list (beachten Sie, dass es anscheinend does not work with IPv6 ist).

  • ldns ist die moderne und glänzende Lösung. Sie haben good documentation online.

  • eine sehr häufige Bibliothek, aber anscheinend nicht gepflegt, ist adns.

+0

+1 für ldns - es ist was ich Verwenden Sie in meinem eigenen Code. – Alnitak

+0

Dann vergessen Sie nicht, es zu veröffentlichen, um schöne Beispiele für die Neulinge zu bieten :-) – bortzmeyer

+0

Ich werde, bald! :) – Alnitak

3

Für C, I mit http://cr.yp.to/djbdns/blurb/library.html gehen würde (die Low-Level-Teile, wenn Sie die totale Kontrolle, dh dns_transmit* und Freunde brauchen) - für C#, vielleicht http://www.c-sharpcorner.com/UploadFile/ivxivx/DNSClient12122005234612PM/DNSClient.aspx (kann, dass man jetzt nicht testen, von wo aus dem " könnte sein"!).

+0

Ich kann die C# one nicht herunterladen, aber die C sieht so gut aus. – BCS

+0

Das C ist nur Unix (ich kann damit leben, aber es ist nicht meine erste Wahl) – BCS

+0

Die djb-Bibliothek scheint nicht IPv6-Lookups zu tun oder einfach Nachschlagewerke für beliebige Resource-Recode-Typen wie NAPTR oder SRV zu tun. – bortzmeyer

0

libdns (ich denke, es ist Teil der Bindung). Es gibt einen Cygwin-Port, der für Windows-Umgebungen nützlich sein kann.

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

+0

In der Windows-Welt gibt es diese nette Funktion namens DNSQuery() http://msdn.microsoft.com/en-us/library/ms682016%28VS.85%29.aspx – Jason

2

Der DNS-Spezifikation über vieleRFC verteilt wird (siehe nice graph) und ich würde dringend raten keine Stub-Resolver von Grund auf neu zu implementieren. Es gibt viele Möglichkeiten, es falsch zu machen. Der DNS hat sich in den letzten Jahren stark entwickelt. Wenn Sie mutig und verrückt sind, sind hier die wichtigsten RFC:

  • RFC 1034, Konzepte
  • RFC 1035, Format
  • RFC 2181, Aktualisierung der Spezifikation, zu viele Fehler zu beheben oder Unklarheiten
  • RFC 2671, EDNS (verpflichtend heute)
  • RFC 3597, die Handhabung der unbekannten Ressourceneintragstypen
  • und viele andere ...
+0

Ich bin nicht/das/verrückt! – BCS