Python 如何从SimpleHTTPServer获取客户端IP

Python 如何从SimpleHTTPServer获取客户端IP,python,http,ip,simplehttpserver,fileserver,Python,Http,Ip,Simplehttpserver,Fileserver,使用Python中的SimpleHTTPServer模块构建一个简单的文件服务器,但是我在尝试从连接的客户端获取IP时遇到了问题。这是我的 import SimpleHTTPServer Handler = SimpleHTTPServer.SimpleHTTPRequestHandler httpd = SocketServer.TCPServer(("", 8080), Handler) print "Serving local directory" while True: h

使用Python中的
SimpleHTTPServer
模块构建一个简单的文件服务器,但是我在尝试从连接的客户端获取IP时遇到了问题。这是我的

import SimpleHTTPServer

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

print "Serving local directory"

while True:
    httpd.handle_request()
    print Handler.client_address[0]
当客户端连接时,我得到

AttributeError:类SimpleHTTPRequestHandler没有属性“client\u address”

我知道这是因为我还没有实例化该类,但是有没有其他方法可以从客户端获取IP而不必创建处理程序实例?当建立连接时,客户端的IP被输出到控制台,我只需要一种在脚本中获取该IP的方法


谢谢

事实上,
处理程序
类对象与特定实例无关。设置您自己的处理程序类,如下所示:

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()

然后我将如何在脚本的其余部分使用它?更清楚地说,我将需要它在脚本中稍后执行一些操作。只需调用
handle\u one\u request
中的每个请求函数即可。如果您想要全局信息(例如,打印最后10个请求的IP),请设置一个全局变量(或者,一个附加到服务器对象),在其中输入信息。我不确定是否理解,请给我举个例子?我所做的任何尝试最终都会导致我试图从类中访问一个变量(我不能这样做)。这个答案已经包含了一个示例,但我很乐意添加另一个示例。要知道这一点,我必须知道你什么时候想要哪个IP。可能的时间选择是午夜时分,当您收到100个请求时,在每个请求上,等等。这将只是一次客户端连接。更具体地说,该脚本需要使用传入IP作为映射到特定MAC地址的字典条目的密钥。因此,端到端操作,应该托管一个目录,获取传入的IP,查找相应的MAC地址,然后能够处理该MAC地址。