Question

Je fais un site Web où les utilisateurs peuvent se connecter et télécharger des fichiers, en utilisant Flask micro-cadre (basé sur Werkzeug ) qui utilise Python (2.6 dans mon cas).

Je dois obtenir l'adresse IP des utilisateurs lorsqu'ils se connectent (à des fins d'exploitation forestière). Est-ce que quelqu'un sait comment faire ça? Certes, il y a un moyen de le faire avec Python?

Était-ce utile?

La solution

Consultez la documentation sur comment accéder à l'objet de demande puis obtenir de ce même objet de demande, l'remote_addr d'attribut.

Exemple de code

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

Pour plus d'informations, consultez le documentation Werkzeug .

Autres conseils

Procurations peut faire un peu délicat, assurez-vous de vérifier ProxyFix ( Flask docs ) si vous utilisez un. Jetez un oeil à request.environ dans votre environnement. Avec nginx je parfois faire quelque chose comme ceci:

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

Lorsque des procurations, comme nginx, adresses avant, ils comprennent généralement l'endroit IP d'origine dans les en-têtes de demande.

Mise à jour Voir la flacon-sécurité mise en œuvre . Encore une fois, consultez la documentation sur ProxyFix avant la mise en œuvre. Votre solution peut varier en fonction de votre environnement.

En fait, ce que vous trouverez est que lorsque simplement obtenir ce qui suit vous obtenir l'adresse du serveur:

request.remote_addr

Si vous voulez que les clients l'adresse IP, utilisez ce qui suit:

request.environ['REMOTE_ADDR']

Adresse IP de l'utilisateur peut être récupéré en utilisant l'extrait suivant:

from flask import request
print(request.remote_addr)

httpbin.org utilise cette méthode:

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

Le code donne ci-dessous toujours l'adresse IP publique du client (et non une adresse IP privée derrière 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

Cela devrait faire le travail. Il fournit l'adresse IP du client (hôte distant).

Notez que ce code est en cours d'exécution sur le côté serveur.

from mod_python import apache

req.get_remote_host(apache.REMOTE_NOLOOKUP)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top