2009-03-16 7 views
10

J'ai besoin de créer un serveur DNS de mise en cache simple et non-autorisé en C/C++. Des conseils? Liens? Des échantillons? Merci!Comment construire un serveur DNS simple personnalisé en C/C++

+0

Pourquoi la Terre que vous pourriez avoir besoin pour construire votre propre serveur DNS? –

+7

Cause J'ai besoin d'un serveur DNS avec une fonctionnalité non standart –

+0

Je vous recommande fortement de rechercher des solutions alternatives, mais si c'est la façon dont vous devez aller ... djbdns est public domain, donc vous pouvez le pirater autant que vous le souhaitez. –

Répondre

16

Il n'existe pas de serveur DNS de mise en cache «simple», en particulier si vous souhaitez une sécurité correcte. Les attaques DNS récentes ont montré que la fonction de mise en cache dans les serveurs DNS récursifs est particulièrement vulnérable. Ré-évaluez si vous avez réellement besoin de la mise en cache locale de votre choix. Si vous ne le faites pas, il est probablement préférable de modifier le code proxy DNS existant (tel que 'dnsmasq').

Si vous voulez faire un roll-own, il existe de bonnes bibliothèques telles que ldns qui peuvent fournir l'accès aux paquets DNS sous-jacents.

J'utilise ldns moi-même en conjonction avec libevent pour implémenter le serveur DNS Fuzzing que j'ai mentionné dans une question précédente.

2

Commencez par djbdns.

+0

Je ferais attention à ce sujet. Le logiciel de djb a des licences très restrictives. assurez-vous qu'il est en accord avec votre utilisation prévue. – SingleNegationElimination

+2

djbdns est maintenant public domain, mais je ne l'utiliserais toujours pas ... – Alnitak

1

Alternativement, vous pouvez utiliser le Ragel State Machine Compiler pour créer votre serveur à partir de zéro.

+0

La machine d'état est une très petite partie du code d'un serveur ... – bortzmeyer

+0

Pour quelque chose défini par une spécification très stricte comme un serveur DNS, c'est un (et sans doute le plus important). –

2

Si vous avez vraiment besoin de le faire (il est un énorme travail, voir la réponse de Alnitak), commencer à partir d'un bon programme (pas une expérience d'un homme unmaintained depuis longtemps comme djbdns) existant et modifier il.

Unbound est probablement un choix raisonnable pour cela. (La base de code est plus petite que celle de BIND.)

+1

Note aux lecteurs: n'oublie pas d'ignorer les downvotes s'il n'y a pas de commentaire pour les expliquer. – bortzmeyer

+1

Le logiciel de djb a été régulièrement connu pour se comporter contrairement aux normes en raison de sa croyance générale que son chemin est meilleur que les normes, et il a également été connu pour nier l'existence de graves bogues altitude élévation de privilèges dans son code. Avec la longue période au cours de laquelle les djbdns étaient complètement non entretenus, je pense que ces facteurs font qu'il est parfaitement juste pour bortzmeyer de l'appeler «une expérience personnelle non maintenue depuis longtemps» et de décourager son déploiement dans des environnements non-amateurs. –

Questions connexes