pygeoip geolocalizacion python flask ip-address werkzeug

python - geolocalizacion - Obtener la dirección IP de los visitantes



geolocalizacion python (7)

El código siguiente 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

Estoy creando un sitio web donde los usuarios pueden iniciar sesión y descargar archivos usando el micro-framework Flask (basado en Werkzeug ) que usa Python (2.6 en mi caso).

Necesito obtener la dirección IP de los usuarios cuando inician sesión (para fines de registro). ¿Alguien sabe como hacer esto? Seguramente hay una manera de hacerlo con Python?


En realidad, lo que encontrará es que cuando obtiene lo siguiente, obtendrá la dirección del servidor:

request.remote_addr

Si desea la dirección IP del cliente, use lo siguiente:

request.environ[''REMOTE_ADDR'']


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

Tenga en cuenta que este código se está ejecutando en el lado del servidor.

from mod_python import apache req.get_remote_host(apache.REMOTE_NOLOOKUP)


La dirección IP del usuario se puede recuperar utilizando el siguiente fragmento de código:

from flask import request print(request.remote_addr)


Proxies puede hacer que esto sea un poco complicado, asegúrese de revisar ProxyFix ( Flask docs ) si está usando uno. Eche un vistazo a request.environ en su entorno particular. Con nginx a veces haré algo como esto:

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

Cuando los proxies, como nginx, reenvían direcciones, generalmente incluyen la dirección IP original en algún lugar de los encabezados de las solicitudes.

Actualización Ver la implementación de la seguridad del matraz . Nuevamente, revise la documentación sobre ProxyFix antes de implementarla. Su solución puede variar en función de su entorno particular.


httpbin.org usa este método:

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


Consulte la documentación sobre cómo acceder al objeto Request y luego obtenga de este mismo objeto Request, el atributo remote_addr .

Ejemplo de código

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 documentación de Werkzeug .