Pregunta

Estoy haciendo un sitio web donde los usuarios pueden iniciar sesión y descargar archivos, utilizando la Frasco micro-marco (basado en Werkzeug ), que utiliza Python (2.6 en mi caso).

necesito para obtener la dirección IP de los usuarios cuando inician sesión (para propósitos de registro). ¿Alguien sabe como hacer esto? Sin duda, hay una manera de hacerlo con Python?

¿Fue útil?

Solución

Consulte la documentación de cómo acceder a la solicitud objeto a continuación, obtener de esta misma solicitud objeto, el remote_addr atributo.

Código de ejemplo

from flask import request
from flask import jsonify

@app.route("/get_my_ip", methods=["GET"])
def get_my_ip():
    return jsonify({'ip': request.remote_addr}), 200

Para obtener más información, consulte la Werkzeug documentación .

Otros consejos

La representación puede hacer esto un poco complicado, asegúrese de revisar ProxyFix ( Frasco documentos ) si está utilizando una. Echar un vistazo a request.environ en su entorno particular. Con nginx a veces a hacer algo como esto:

from flask import request   
request.environ.get('HTTP_X_REAL_IP', request.remote_addr)   

Cuando proxies, como Nginx, direcciones hacia adelante, por lo general incluyen la IP original en algún lugar en las cabeceras de petición.

Actualizar Ver la matraz de seguridad aplicación. Una vez más, revise la documentación sobre ProxyFix antes de implementar. Su solución puede variar en función de su entorno particular.

En realidad, lo que se encontrará es que cuando simplemente conseguir la siguiente te llevará a la dirección del servidor:

request.remote_addr

Si desea que los clientes dirección IP, a continuación, utilizar la siguiente:

request.environ['REMOTE_ADDR']

La dirección IP del usuario puede ser recuperada mediante el siguiente fragmento:

from flask import request
print(request.remote_addr)

httpbin.org utiliza este método:

return jsonify(origin=request.headers.get('X-Forwarded-For', request.remote_addr))

El código de abajo siempre da la IP pública del cliente (y no una IP privada detrás de un proxy).

from flask import request

if request.environ.get('HTTP_X_FORWARDED_FOR') is None:
    print(request.environ['REMOTE_ADDR'])
else:
    print(request.environ['HTTP_X_FORWARDED_FOR']) # if behind a proxy

Esto debería hacer el trabajo. Proporciona la dirección IP del cliente (host remoto).

Tenga en cuenta que este código se ejecuta en el lado del servidor.

from mod_python import apache

req.get_remote_host(apache.REMOTE_NOLOOKUP)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top