【问题标题】:Create custom DNS name server in C在 C 中创建自定义 DNS 名称服务器
【发布时间】:2009-10-23 15:34:24
【问题描述】:

需要使用 C 创建自定义 DNS 名称服务器,该服务器将检查 mysql db 以查看客户端 IP 是否需要定向到不同的服务器。将其用于测试网络,因此只有在启用了真正的查找时,对 foo.com 的请求才会到达那里,否则请求将被定向到开发环境。有什么建议/建议吗?

目前正在使用 ldns 或 c-ares 之类的东西查看 libevent

【问题讨论】:

  • 您是否需要此名称服务器是递归的?
  • 目前有一个使用 Stanford::DNSserver 的 perl dns 名称服务器,这会崩溃并需要每天重新启动,所以我正在考虑用 C 编写类似的功能。 据我所知,Stanford::DNSserver只是权威。目标是像 dns 服务器一样,根据 mysql 表中的信息只修改某些请求,并将所有其他请求转发到真正的 dns 服务器。

标签: c dns


【解决方案1】:

BIND 已经有一个 mySQL 扩展(使用动态可加载区域)。您需要做的就是创建一个带有翻译的地址表,并使用该表定义构建正确 DNS 记录的查询。

有关完整文档,请参阅:http://bind-dlz.sourceforge.net/

【讨论】:

    【解决方案2】:

    与我现在正在做的事情非常相似,除了在我的情况下,我必须让 DNS 服务器返回与正常情况不同的错误消息,以适应它在专用网络上运行的事实。

    我决定只下载 BIND 源代码并将我的修改写成补丁。然后为了部署,我们可以下载最新的 BIND 源代码,其中将包含新的安全补丁,应用我们的自定义补丁并构建它。

    我建议您做很多相同的事情,只需获取 BIND 并根据需要对其进行修改。您可以获取 BIND 及其所有文档 here at ISC.ORG

    【讨论】:

    • 我认为这不是一个好主意。 BIND 9(与其继任者 BIND 10 的计划不同)并不是真正为可破解而设计的。
    • 这只是意味着在 BIND 9 中破解并不那么容易,因为源代码没有很好地组织和重构。但有时开发人员只需要深入挖掘并找出问题所在。无论如何,OP 指定了 C 并且可能非常熟练地使用它,否则我会建议使用带有 DNS 服务器的 Python 和 Twisted Names 来进行黑客攻击。
    【解决方案3】:

    Bob,我已经编写了 ldnslibevent 的混搭,它应该为您提供一个良好的开端,让您能够完全按照自己的意愿行事。

    看看http://code.google.com/p/evldns/

    【讨论】:

      【解决方案4】:

      我最终选择了 libevent 1.4,它包含自己的函数来处理 dns 请求。 libevent 包含的 evdns 函数非常简单,并且正是我需要创建 q 自定义 dns 服务器的地方。我查看了使用绑定,但不想处理必须设置区域和额外配置的问题,evdns 允许我使用现有的 resolv.conf 将任何 dns 请求转发到实名服务器并根据信息根据需要修改响应包含在 mysql 表中。

      【讨论】:

        猜你喜欢
        • 2017-02-18
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        • 2013-01-10
        • 2017-06-29
        • 2018-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多