0

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

2 回答 2

5

无需使用线程。

使用扭曲。

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

于 2009-11-18T01:49:06.637 回答
0

您可以使用非阻塞套接字,并使用 select 调用从套接字中读取。这篇Sockets Programming HOWTO for Python文章有一节介绍Python 中的非阻塞套接字,这将有所帮助。

也可以看看:

于 2009-11-18T02:35:29.273 回答