Cómo obtener la dirección IP del cliente utilizando el marco de la botella de Python

Necesito la dirección IP del cliente usando python. He intentado a continuación el código pero no funciona en el servidor:

from socket import gethostname, gethostbyname ip = gethostbyname(gethostname()) print ip 

En el servidor, obtengo ‘127.0.0.1’ cada vez. ¿Hay alguna forma de encontrar la dirección IP del cliente?

Obtiene la dirección IP de su servidor , no de los clientes de su servidor.

Desea ver el REMOTE_ADDR la solicitud , como esto:

 from bottle import Bottle, request app = Bottle() @app.route('/hello') def hello(): client_ip = request.environ.get('REMOTE_ADDR') return ['Your IP is: {}\n'.format(client_ip)] app.run(host='0.0.0.0', port=8080) 

EDITAR: Algunas personas han observado que, para ellos, el valor de REMOTE_ADDR es siempre la misma dirección IP (generalmente 127.0.0.1 ). Esto se debe a que están detrás de un proxy (o equilibrador de carga). En este caso, la dirección IP original del cliente normalmente se almacena en el encabezado HTTP_X_FORWARDED_FOR . El siguiente código funcionará en cualquier caso:

 @app.route('/hello') def hello(): client_ip = request.environ.get('HTTP_X_FORWARDED_FOR') or request.environ.get('REMOTE_ADDR') return ['Your IP is: {}\n'.format(client_ip)] 

El servidor podría estar detrás de un proxy. Use esto para proxy y soporte de reenvío:

 request.environ.get('HTTP_X_FORWARDED_FOR') or request.environ.get('REMOTE_ADDR') 

Si está tratando de obtener la IP externa, necesitará obtenerla de una fuente externa, es decir, whatismyip.com o en algún lugar que ofrezca una api. Si eso es lo que está buscando, eche un vistazo al módulo de solicitudes http://docs.python-requests.org/