0

PythonでDNSサーバーを構築しようとしています。2 つのポート (8007 - クライアント、8008 - 管理者) をリッスンする必要があります。クライアントは URL のみを送信し、それぞれの IP を受信します。管理者には、DNS テーブルを変更する権限があります (追加、削除、.. 現時点では問題ありません)。

したがって、私の質問は次のとおりです。最終的な要求に対して2つのポートで継続的にリッスンするサーバーを実装するにはどうすればよいですか(同時に複数のクライアントを持つことができますが、彼が操作しているときは管理者は1人だけです)

1 つのリッスン ポートを持つサーバー:

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()
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 に答える