Získat IP adresy návštěvníků

hlasů
148

Dělám webové stránky, kde uživatelé mohou přihlásit a stahovat soubory pomocí Flask mikro-rámec (založený na Werkzeug ), který používá Python (2.6 v mém případě).

Musím se dostat IP adresu uživatele při přihlášení (pro účely protokolování). Ví někdo, jak to udělat? Určitě existuje způsob, jak to udělat v Pythonu?

Položena 21/09/2010 v 12:49
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
198

Naleznete v dokumentaci o tom, jak získat přístup k objektu Request a pak se z tohoto stejného Request objektu, atribut remote_addr.

příklad kódu

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

Další informace naleznete v dokumentaci Werkzeug .

Odpovězeno 21/09/2010 v 13:37
zdroj uživatelem

hlasů
27

IP adresa uživatele lze získat pomocí následující úryvek:

from flask import request
print(request.remote_addr)
Odpovězeno 12/05/2013 v 01:21
zdroj uživatelem

hlasů
69

Ve skutečnosti to, co najdete, je, že když jednoduše dostat následující dostanete adresu serveru:

request.remote_addr

Pokud chcete, aby klienti IP adresy, pak použijte následující:

request.environ['REMOTE_ADDR']
Odpovězeno 30/07/2014 v 16:05
zdroj uživatelem

hlasů
60

Zmocněnci může dělat to trochu složitější, ujistěte se, podívejte se ProxyFix ( baňky docs ), pokud ji používáte. Podívejte se na request.environv konkrétním prostředí. S Nginx budu někdy něco takového:

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

Když proxy, jako Nginx, vpřed adres, které obvykle zahrnují původní IP někde v záhlaví požadavku.

Aktualizace Viz implementaci baňky se zabezpečením . Opět platí, že v dokumentaci o ProxyFix před jejím provedením. Vaše řešení se může lišit v závislosti na konkrétním prostředí.

Odpovězeno 30/10/2014 v 13:41
zdroj uživatelem

hlasů
7

httpbin.org používá tuto metodu:

return jsonify(origin=request.headers.get('X-Forwarded-For', request.remote_addr))
Odpovězeno 31/07/2016 v 11:39
zdroj uživatelem

hlasů
0

To by mělo dělat svou práci. Poskytuje klient IP adresu (vzdáleného hostitele).

Všimněte si, že tento kód běží na straně serveru.

from mod_python import apache

req.get_remote_host(apache.REMOTE_NOLOOKUP)
Odpovězeno 22/02/2018 v 08:57
zdroj uživatelem

hlasů
0

Níže uvedený kód vždy dává veřejnou IP klienta (a nikoli soukromé IP server 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
Odpovězeno 10/04/2018 v 18:02
zdroj uživatelem

hlasů
0

Mám Nginx as níže Nginx Config :

server {
    listen 80;
    server_name xxxxxx;
    location / {
               proxy_set_header   Host                 $host;
               proxy_set_header   X-Real-IP            $remote_addr;
               proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;
               proxy_set_header   X-Forwarded-Proto    $scheme;

               proxy_pass http://x.x.x.x:8000;
        }
}

@ tírtha-r řešení pracoval pro mě

#!flask/bin/python
from flask import Flask, jsonify, request
app = Flask(__name__)

@app.route('/', methods=['GET'])
def get_tasks():
    if request.environ.get('HTTP_X_FORWARDED_FOR') is None:
        return jsonify({'ip': request.environ['REMOTE_ADDR']}), 200
    else:
        return jsonify({'ip': request.environ['HTTP_X_FORWARDED_FOR']}), 200

if __name__ == '__main__':
    app.run(debug=True,host='0.0.0.0', port=8000)

Můj požadavek i odpověď:

curl -X GET http://test.api

{
    "ip": "Client Ip......"
}
Odpovězeno 20/08/2018 v 10:37
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more