【问题标题】:How do I make a simple DNS server listening two ports simultaneously in python如何让一个简单的 DNS 服务器在 python 中同时监听两个端口
【发布时间】:2009-11-18 00:44:43
【问题描述】:

我正在尝试在 python 中构建 DNS 服务器。它必须监听两个端口(8007 - 客户端,80​​08 - 管理员)。客户端只发送一个 URL 并接收相应的 IP。管理员有权更改 DNS 表(添加、删除、.. 与此无关)。

所以我的问题是:我如何实现服务器在两个端口上连续监听任何最终请求(我们可以同时有多个客户端,但在他操作时只有一个管理员)

我的服务器只有一个监听端口:

从 SocketServer 导入 * 从线程导入 * 从字符串导入 * 导入套接字

    class Server(ForkingMixIn, TCPServer): pass  #fork for each client

    class Handler(StreamRequestHandler):

        def handle(self):
            addr = self.request.getpeername()
            print 'Got connection from', addr
            data=(self.request.recv(1024)).strip()

            if data not in dic: #dic -> dictionary with URL:IP
                self.wfile.write('0.0.0.0')
            else:
                self.wfile.write(dic.get(data))


    server = Server(('', 8007), Handler)
    server.serve_forever()

【问题讨论】:

  • 您是否意识到此代码与 RFC1034 和 RFC1035 中定义的真实 DNS 系统无关? (参见rfc-editor.org/rfc/rfc1035.txt
  • "如何让一个 SIMPLE DNS 服务器在 python 中同时监听两个端口"
  • 正如 Adrien 所说...您知道“这不是 DNS 的工作方式”,对吧?首先,DNS 服务器不会接收 URL,它会接收针对特定记录名称和类型的特定格式查询...

标签: python dns ports listen


【解决方案1】:

无需使用线程。

使用扭曲。

TwistedNames 支持开箱即用的 dns 服务器。您可以根据需要对其进行自定义,也可以在构建时将其源代码作为基础。

【讨论】:

    【解决方案2】:

    您可以使用非阻塞套接字,并使用 select 调用从套接字读取。这篇Sockets Programming HOWTO for Python 文章有一个关于non-blocking sockets in Python 的部分会有所帮助。

    另见:

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 2016-02-08
      • 2017-03-30
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      相关资源
      最近更新 更多