【问题标题】:How to Build a custom simple DNS server in C/C++ [closed]如何在 C/C++ 中构建自定义的简单 DNS 服务器 [关闭]
【发布时间】:2009-03-16 08:19:52
【问题描述】:

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

【问题讨论】:

  • 为什么您可能需要构建自己的 DNS 服务器?
  • 因为我需要一个具有一些非标准功能的 DNS 服务器
  • 我强烈建议你寻找替代解决方案,但如果这是你必须走的路……djbdns 是公共领域,所以你可以随心所欲地破解它。
  • 如果可以,请提供有关此“非标准功能”的更多信息。这里有几位 DNS 专家...
  • this answer

标签: c++ c dns


【解决方案1】:

没有“简单”的缓存 DNS 服务器之类的东西,尤其是如果您想要良好的安全性。最近的 DNS 攻击表明,递归 DNS 服务器中的缓存功能特别容易受到攻击。

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

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

我自己使用ldnslibevent 来实现我在之前的问题中提到的模糊DNS 服务器。

【讨论】:

    【解决方案2】:

    我在 BSD 许可下为面试编写了一个基本的 DNS 服务器。

    也许有人会觉得它有用:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        如果你真的需要这样做(这是一项巨大的工作,请参阅 Alnitak 的回复),从现有的 good 程序开始(不是无人维护的单人实验喜欢djbdns好久了),修改一下。

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

        【讨论】:

        • 读者注意:如果没有评论可以解释,请记住忽略不赞成票。
        • djb 的软件经常被认为违反标准,因为他普遍认为他的方式比标准更好,而且他还否认存在严重的远程特权提升错误他的代码。加上 djbdns 在很长一段时间内完全无人维护,我认为这些因素让 bortzmeyer 将其称为“长期无人维护的单人实验”并阻止其在非爱好者环境中的部署是完全公平的。
        【解决方案5】:

        djbdns开头。

        【讨论】:

        • 我会小心的。 djb 的软件有非常严格的许可证。确保它符合您的预期用途。
        • djbdns 现在是公共领域,但我还是不会使用它...
        【解决方案6】:

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

        【讨论】:

        • 状态机只是服务器代码的一小部分...
        • 对于像 DNS 服务器这样由非常严格的规范定义的东西,它是一个重要的(并且可以说是最重要的)部分。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        • 2017-03-19
        • 1970-01-01
        • 2021-09-28
        • 2022-10-14
        相关资源
        最近更新 更多