2016-05-05 5 views
1

PythonでSimpleHTTPServerモジュールを使用して単純なファイルサーバーを構築していますが、接続先のクライアントからIPを取得しようとすると問題が発生します。クライアントは私が得る接続するとここで私は、私はまだクラスをインスタンス化していないので、これはですが、取得するための別の方法が存在しているはず.. ..私が持っているものSimpleHTTPServerからクライアントIPを取得する方法

AttributeError: class SimpleHTTPRequestHandler has no attribute 'client_address' 

import SimpleHTTPServer 

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler 
httpd = SocketServer.TCPServer(("", 8080), Handler) 

print "Serving local directory" 

while True: 
    httpd.handle_request() 
    print Handler.client_address[0] 

ですハンドラインスタンスを作成することなくクライアントからのIPを取得できますか? IPクライアントは、接続が確立されたときにコンソールに出力されます。スクリプト内でそのIPを取得する方法が必要です。

ありがとうございます!

答えて

2

実際、Handlerクラスオブジェクトは、特定のインスタンスとは無関係です。

import SimpleHTTPServer 
import SocketServer 


class MyHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): 
    def handle_one_request(self): 
     print(self.client_address[0]) 
     return SimpleHTTPServer.SimpleHTTPRequestHandler.handle_one_request(self) 

print("Serving local directory") 
httpd = SocketServer.TCPServer(("", 8080), MyHandler) 

while True: 
    httpd.handle_request() 
+0

私はどのようにスクリプトの残りの部分でそれを使用するつもりですか?もっと明確にするために、後でスクリプトでいくつかの操作を行う必要があります。 – Devigili

+0

'handle_one_request'の中でリクエストごとの関数を呼び出すだけです。グローバル情報(たとえば、最後の10個の要求IPを印刷する場合)を入力するには、情報を入力するグローバル変数(サーバオブジェクトに接続されているグローバル変数)を設定します。 – phihag

+0

わかりませんが、私に例を示してもらえますか?どのような試みでも、私は最終的に私ができないクラスから変数にアクセスしようとしています。 – Devigili

関連する問題