2009-05-25 11 views
2

Je pense à exécuter un test pour suivre les valeurs DNS de différentes manières (comme la fréquence à laquelle elles changent et autres joyeusetés). Pour ce faire, je devrai être capable de faire une requête DNS directement à un serveur afin que 1) Je sache de quel serveur il provient, 2) Je peux demander des réponses de plusieurs serveurs et 3) Je peux éviter le cache d'exécution du système d'exploitation local .Code pour effectuer une recherche DNS directe

Quelqu'un connaît-il une bibliothèque (C#, D, C, C++ dans cet ordre de préférence) qui me permettra d'interroger directement un serveur DNS? A défaut, quelqu'un connaît-il une description facile à comprendre du protocole DNS dont je pourrais mettre en œuvre un tel système?

+0

L'emballage d'un outil comme host (1) est-il hors de question? – Dave

+0

Aussi, n'oubliez pas d'être gentil avec les serveurs DNS qui ne vous appartiennent pas. – Dave

+0

Je pense que quelques centaines de demandes par jour ne seraient même pas remarquées. Je pourrais exécuter autant de mon navigateur seul – BCS

Répondre

3

j'ai l'expérience seulement avec C, alors voici ma liste:

  • libresolv est l'ancienne, de façon traditionnelle et standard. Il est disponible sur tous les Unix (type man 3 resolver) et inclut des routines comme res_query qui fait plus ou moins ce que vous voulez. Pour interroger un serveur de noms spécifique, vous mettez généralement à jour la variable globale _res.nsaddr_list (notez que, apparemment, il does not work with IPv6).

  • ldns est la solution moderne et brillante. Vous avez good documentation online. Une bibliothèque très commune, mais apparemment non maintenue, est adns.

+0

+1 pour ldns - c'est ce que j'ai utiliser dans mon propre code. – Alnitak

+0

Ensuite, n'oubliez pas de le publier pour fournir de bons exemples aux nouveaux arrivants :-) – bortzmeyer

+0

Je le ferai, bientot! :) – Alnitak

3

Pour C, je partirais avec http://cr.yp.to/djbdns/blurb/library.html (les parties de bas niveau si vous avez besoin de contrôle total, soit dns_transmit* et amis) - C#, peut-être http://www.c-sharpcorner.com/UploadFile/ivxivx/DNSClient12122005234612PM/DNSClient.aspx (ne peut pas vérifier que l'un moment, d'où le " peut être"!).

+0

Je ne peux pas télécharger le C# 1 mais le C a l'air bien jusqu'à présent. – BCS

+0

Le seul C est Unix seulement (je peux vivre avec ça, mais ce n'est pas mon premier choix) – BCS

+0

La bibliothèque djb semble incapable de faire des recherches IPv6 ou, tout simplement, de faire des recherches pour les types de recodage des ressources arbitraires telles que NAPTR ou SRV. – bortzmeyer

0

libdns (Je pense que cela fait partie de bind). Il y a un port cygwin qui peut être utile pour les environnements Windows.

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

+0

Dans le monde de Windows il y a cette belle fonction nommée DNSQuery() http://msdn.microsoft.com/en-us/library/ms682016%28VS.85%29.aspx – Jason

2

La spécification DNS est répartie sur de nombreux RFC (voir un nice graph) et je vous conseille vivement pas à mettre en œuvre un résolveur de stub à partir de zéro. Il y a beaucoup d'occasions de se tromper. Le DNS a beaucoup évolué ces dernières années. Si vous êtes courageux et fou, voici le RFC le plus important:

  • RFC 1034, concepts
  • RFC 1035, le format
  • RFC 2181, mise à jour du cahier des charges, de nombreuses erreurs ou ambiguïtés
  • RFC 2671, EDNS (aujourd'hui obligatoire)
  • RFC 3597, la manipulation des types d'enregistrements de ressources inconnues
  • et bien d'autres ...
+0

Je ne suis pas/que/fou! – BCS

Questions connexes