15

I am using a python script to do my webserver using the BaseHTTPServer module. Below is my code for the server:

import string,cgi,time
from os import curdir, sep
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
#import pri

class MyHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        try:
        if self.path.endswith("/"):
        f = open(curdir + sep + "index.html")
        self.send_response(200)
        self.send_header('Content-type',    'text/html')
        self.end_headers()
        self.wfile.write("<HTML> GET OK.<BR>")
        f.close()
        return

            return

        except IOError:
            self.send_error(404,'File Not Found: %s' % self.path)


    def do_POST(self):
        global rootnode
        try:
            ctype, pdict = cgi.parse_header(self.headers.getheader('content-type'))
            if ctype == 'multipart/form-data':
                query=cgi.parse_multipart(self.rfile, pdict)
            self.send_response(200)
            self.send_header('Content-type',    'text/html')
        self.end_headers()
        file = query.get('file')
        self.wfile.write("<HTML> POST OK.<BR>")
        f = open("data.zip", "wb")
            f.write(file[0])
            f.close()
            print("File received.")
        return

        except :
            pass

def main():
    try:
        server = HTTPServer(('', 8080), MyHandler)
        print 'started httpserver...'
        server.serve_forever()
    except KeyboardInterrupt:
        print '^C received, shutting down server'
        server.socket.close()

if __name__ == '__main__':
    main()

Is there anyway to get the IP address of a POST request when my server receives it? Many thanks in advance.

1 Answer 1

22

You should be able to get their IP address with self.client_address[0].

Sign up to request clarification or add additional context in comments.

5 Comments

When I do print self.client_address, it gives me an IP address and a number. Is that the port number?
@androidnoob: Yes, the second number is the client's port. If you want just the IP address, tack [0] onto the end.
I see. Thank you very much for your prompt answer! I can't thank you enough for it!
Hmm.. can you explain why I always get the value 192.168.2.50 no matter where the client is connecting from?
@pir: You've probably got a reverse proxy running in front of your application. Some proxies add an X-Forwarded-For header that provides the IP address of the client that connected to it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.