如何在C / C ++中构建自定义简单DNS服务器

时间:2009-03-16 08:19:52

标签: c++ c dns

我需要在C / C ++中构建一个自定义的简单非权威缓存DNS服务器。任何指导?链接?样品? 谢谢!

6 个答案:

答案 0 :(得分:16)

没有“简单”缓存DNS服务器这样的东西,特别是如果你想要体面的安全性。最近的DNS攻击表明,递归DNS服务器中的缓存功能特别容易受到攻击。

重新评估您是否确实需要自己的本地缓存。如果不这样做,您可能最好修改现有的DNS代理代码(例如'dnsmasq')。

如果您确实想要自己动手,那么有一些好的库,例如ldns,可以提供对底层DNS数据包的访问。

我正在使用ldns自己与libevent一起实现我在之前的问题中提到的F​​uzzing DNS服务器。

答案 1 :(得分:14)

我根据BSD许可证为求职面试编写了一个基本的DNS服务器。

可能有人会发现它很有用:

http://code.google.com/p/dns-server/

https://github.com/tomasorti/dns-server

答案 2 :(得分:3)

有许多DNS的免费软件实现。你可以查看他们的源代码。例如:

这本书DNS and BIND可能会有所帮助。当然,还有指定DNS的RFC,请参阅http://rfc-editor.org/

答案 3 :(得分:2)

djbdns开始。

答案 4 :(得分:2)

如果你真的需要这样做(这是巨大的工作,请参阅Alnitak的回复),从现有的良好计划开始(不是一个没有维护的单人实验)很长一段时间像djbdns)并修改它。

Unbound可能是一个合理的选择。 (代码库小于BIND的代码库。)

答案 5 :(得分:1)

或者,您可以使用Ragel State Machine Compiler从头开始构建服务器。