Получение IP-адреса из запроса HTTP POST с использованием Python

Я использую скрипт Python, чтобы сделать свой веб-сервер с помощью модуля BaseHTTPServer. Ниже мой код для сервера:

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

Есть ли способ получить IP-адрес POST-запроса, когда мой сервер его получает? Спасибо заранее.


person Zerhinne    schedule 22.02.2012    source источник


Ответы (1)


Вы сможете получить их IP-адрес с помощью self.client_address[0].

person icktoofay    schedule 22.02.2012
comment
Когда я делаю print self.client_address, он дает мне IP-адрес и номер. Это номер порта? - person Zerhinne; 22.02.2012
comment
@androidnoob: Да, второе число — это порт клиента. Если вам нужен только IP-адрес, добавьте [0] в конец. - person icktoofay; 22.02.2012
comment
Я понимаю. Большое спасибо за оперативный ответ! Я не могу отблагодарить вас за это! - person Zerhinne; 22.02.2012
comment
Хм... не могли бы вы объяснить, почему я всегда получаю значение 192.168.2.50 независимо от того, откуда подключается клиент? - person pir; 01.08.2017
comment
@pir: У вас, вероятно, есть обратный прокси-сервер, работающий перед вашим приложением. Некоторые прокси-серверы добавляют заголовок X-Forwarded-For, который содержит IP-адрес клиента, подключившегося к этому. - person icktoofay; 13.12.2017