То, что вы хотите, находится в среде wsgi , в частности environ['REMOTE_ADDR']
.
Однако, если задействован прокси, то REMOTE_ADDR
будет адресом прокси, и адрес клиента будет включен (скорее всего) в HTTP_X_FORWARDED_FOR
.
Вот функция, которая должна делать то, что вы хотите, в большинстве случаев (все кредиты Sævar ):
def get_client_address(environ):
try:
return environ['HTTP_X_FORWARDED_FOR'].split(',')[-1].strip()
except KeyError:
return environ['REMOTE_ADDR']
Вы можете легко увидеть, чтовключите в среду wsgi, написав простое приложение wsgi и указав на него браузер, например:
from eventlet import wsgi
import eventlet
from pprint import pformat
def show_env(env, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['%s\r\n' % pformat(env)]
wsgi.server(eventlet.listen(('', 8090)), show_env)
И объединяя два ...
from eventlet import wsgi
import eventlet
from pprint import pformat
def get_client_address(environ):
try:
return environ['HTTP_X_FORWARDED_FOR'].split(',')[-1].strip()
except KeyError:
return environ['REMOTE_ADDR']
def show_env(env, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['%s\r\n\r\nClient Address: %s\r\n' % (pformat(env), get_client_address(env))]
wsgi.server(eventlet.listen(('', 8090)), show_env)