如何在C / C ++中构建自定义简单DNS服务器
我需要在C / C ++中构建一个自定义的简单非权威缓存DNS服务器。 任何指导? 链接? 样品? 谢谢!
没有“简单”缓存DNS服务器这样的东西,特别是如果你想要体面的安全性。 最近的DNS攻击表明,递归DNS服务器中的缓存function特别容易受到攻击。
重新评估您是否确实需要自己的本地缓存。 如果不这样做,您可能最好修改现有的DNS代理代码(例如’dnsmasq’)。
如果你想要自己动手,那么有很好的库,比如ldns
,可以提供对底层DNS数据包的访问。
我自己使用ldns
与libevent
一起实现我在之前的问题中提到的Fuzzing DNS服务器。
有一堆DNS的免费软件实现。 你可以查看他们的源代码。 例如:
书籍DNS和BIND可能会有所帮助。 当然,还有指定DNS的RFC,请参阅http://rfc-editor.org/ 。
从djbdns开始。
如果你真的需要这样做(这是一项巨大的工作,请参阅Alnitak的回复),从一个现有的好程序开始(不是像djbdns那样长时间没有维护的单人实验)并修改它。
对于这一点, Unbound可能是一个合理的选择。 (代码库小于BIND的代码库。)
或者,您可以使用Ragel状态机编译器从头开始构建您的服务器。