Ich erstelle eine Website, auf der sich Benutzer anmelden und Dateien herunterladen können, indem ich das Flask Micro-Framework (basierend auf Werkzeug ) verwende, das Python verwendet (in meinem Fall 2.6).
Ich muss die IP-Adresse der Benutzer abrufen, wenn sie sich anmelden (zu Protokollierungszwecken). Weiß jemand, wie man das macht? Sicher gibt es eine Möglichkeit, dies mit Python zu tun?
python
flask
ip-address
werkzeug
Jon Cox
quelle
quelle
HTTP_X_FORWARDED_FOR
, stellen Sie also sicher, dass Sie nicht bei jeder Anforderung mit localhost enden.Proxies können dies etwas schwierig machen. Lesen Sie unbedingt ProxyFix ( Flask-Dokumente ), wenn Sie eines verwenden. Schauen Sie sich
request.environ
Ihre spezielle Umgebung an. Mit Nginx mache ich manchmal so etwas:Wenn Proxys wie Nginx Adressen weiterleiten, enthalten sie normalerweise die ursprüngliche IP-Adresse irgendwo in den Anforderungsheadern.
Update Siehe die Implementierung der Flaschensicherheit . Lesen Sie vor der Implementierung erneut die Dokumentation zu ProxyFix. Ihre Lösung kann je nach Umgebung variieren.
quelle
Tatsächlich werden Sie feststellen, dass Sie die Adresse des Servers erhalten, wenn Sie einfach Folgendes erhalten:
Wenn Sie die IP-Adresse des Clients möchten, verwenden Sie Folgendes:
quelle
request.remote_addr
klingt wie eine Eigenschaft, die eine Remote-Adresse erhalten sollte, je nachdem, ob der Reverse-Proxy vertrauenswürdig ist.Die IP-Adresse des Benutzers kann mit dem folgenden Snippet abgerufen werden:
quelle
Ich habe Nginx und mit unten Nginx Config :
@ tirtha-r Lösung hat bei mir funktioniert
Meine Anfrage und Antwort:
quelle
Der folgende Code gibt immer die öffentliche IP des Clients an (und keine private IP hinter einem Proxy).
quelle
httpbin.org verwendet diese Methode:
quelle
127.0.0.1
aufgrund von Proxy, nicht sehr hilfreich.Wenn Sie Nginx hinter einem anderen Balancer verwenden, z. B. AWS Application Balancer, gibt HTTP_X_FORWARDED_FOR eine Adressliste zurück. Es kann so behoben werden:
quelle
Wenn Sie die Gunicorn- und Nginx-Umgebung verwenden, funktioniert die folgende Codevorlage für Sie.
quelle
Dies sollte den Job machen. Es gibt die Client-IP-Adresse (Remote-Host) an.
Beachten Sie, dass dieser Code auf der Serverseite ausgeführt wird.
quelle