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

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

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

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

如果你想要自己动手,那么有很好的库,比如ldns ,可以提供对底层DNS数据包的访问。

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

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

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

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

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

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

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

从djbdns开始。

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

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

或者,您可以使用Ragel状态机编译器从头开始构建您的服务器。