如何让一个简单的DNS服务器在python中同时监听两个端口

时间:2009-11-18 00:44:44

标签: python dns ports listen

我正在尝试在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()

2 个答案:

答案 0 :(得分:5)

无需使用线程。

使用扭曲。

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

答案 1 :(得分:0)

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

另见: