Как сделать простой DNS-сервер, слушающий два порта одновременно в Python - PullRequest
0 голосов
/ 18 ноября 2009

Я пытаюсь построить DNS-сервер в Python. Он должен прослушивать два порта (8007 - клиент, 8008 - админ). Клиент только отправляет 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 ]

5 голосов
/ 18 ноября 2009

Нет необходимости использовать темы.

Используйте витую.

TwistedNames имеет встроенную поддержку для DNS-сервера. Вы можете настроить его по мере необходимости или прочитать его источник в качестве базы при создании своего.

0 голосов
/ 18 ноября 2009

Вы можете использовать неблокирующие сокеты и использовать вызов select для чтения из сокета. В этой статье Sockets Programming HOWTO для Python есть раздел о неблокирующих сокетах в Python , который поможет.

Смотри также:

...