Parse X-Forwarded-For para obtener ip con werkzeug en Heroku

Heroku envía proxies desde un cliente al servidor, por lo que tiene que analizar X-Forwarded-For para encontrar la dirección IP de origen.

El formato general de X-Forwarded-For es:

X-Forwarded-For: client1, proxy1, proxy2 

Utilizando werkzeug en el matraz, estoy tratando de encontrar una solución para acceder a la IP original del cliente.

¿Alguien sabe una buena manera de hacer esto?

¡Gracias!

Werkzeug (y Flask) almacenan los encabezados en una instancia de werkzeug.datastructures.Headers . Deberías poder hacer algo como esto:

 provided_ips = request.headers.getlist("X-Forwarded-For") # The first entry in the list should be the client's IP. 

Alternativamente, puedes usar request.access_route (¡gracias @Bastian por señalarlo!):

 provided_ips = request.access_route # First entry in the list is the client's IP 

Esto es lo que uso en Django. Consulte este https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.get_host

Nota: Al menos en Heroku HTTP_X_FORWARDED_FOR habrá una matriz de direcciones IP. El primero es la IP del cliente y el rest son las IP del servidor proxy.

en settings.py:

 USE_X_FORWARDED_HOST = True 

en tus vistas.py:

 if 'HTTP_X_FORWARDED_FOR' in request.META: ip_adds = request.META['HTTP_X_FORWARDED_FOR'].split(",") ip = ip_adds[0] else: ip = request.META['REMOTE_ADDR']