如何用Python创建一个同时监听两个端口的简单DNS服务器

0 投票
2 回答
1944 浏览
提问于 2025-04-15 16:07

我正在尝试用Python建立一个DNS服务器。这个服务器需要监听两个端口(8007 - 客户端,8008 - 管理员)。客户端只需要发送一个网址,然后就能收到对应的IP地址。而管理员则有权限修改DNS表(比如添加、删除等等,这个现在不重要)。

所以我想问的是:我该如何实现这个服务器,让它能够持续监听这两个端口,随时接收请求(我们可以同时有多个客户端,但在管理员操作时只能有一个管理员)

这是我用一个监听端口的服务器代码:

from SocketServer import *
from threading import *
from string import *
import socket

    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

你可以使用非阻塞套接字,并通过调用 select 来从套接字读取数据。这个 Python 套接字编程指南 里有一部分专门讲解 Python 中的非阻塞套接字,可以帮助你理解。

另外,你也可以参考:

5

不需要使用线程。

可以使用Twisted。

TwistedNames 自带了对DNS服务器的支持。你可以根据需要进行自定义,或者在你自己构建的时候参考它的源代码。

撰写回答