How to get client IP from SimpleHTTPServer

Devigili picture Devigili · May 5, 2016 · Viewed 7.6k times · Source

Building a simple file server using the SimpleHTTPServer module in Python, however I'm running into issues when trying to get the IP from a connecting client. Here is what I have..

import SimpleHTTPServer

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

print "Serving local directory"

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

When a client connects I get..

AttributeError: class SimpleHTTPRequestHandler has no attribute 'client_address'

I know this is because I haven't instantiated the class yet, but is there another way to get the IP from the client without having to create a handler instance? The client's IP is outputted to the console when a connection is made, I just need a way to grab that IP within my script.

Thanks!

Answer

phihag picture phihag · May 5, 2016

Indeed, the Handler class object is unrelated to specific instances. Set up your own handler class, like this:

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