社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何使用python获取客户端的ip地址[duplicate]

Jérôme Vial • 7 年前 • 2751 次点击  

我正在创建一个网站,用户可以登录并下载文件,使用 Flask micro-framework (基于 Werkzeug )它使用python(在我的例子中是2.6)。

我需要获取用户登录时的IP地址(用于登录目的)。 有人知道怎么做吗?当然有办法用python来实现这一点吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40297
文章 [ 8 ]  |  最新文章 7 年前
Tetsuya Yamamoto
Reply   •   1 楼
Tetsuya Yamamoto    8 年前

这样就可以了。 它提供客户端IP地址(远程主机)。

请注意,此代码在服务器端运行。

from mod_python import apache

req.get_remote_host(apache.REMOTE_NOLOOKUP)
Tirtha R
Reply   •   2 楼
Tirtha R    8 年前

下面的代码总是给出客户端的公共IP(而不是代理后面的私有IP)。

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
Soheyl
Reply   •   3 楼
Soheyl    8 年前

我有 恩吉克斯 下面是 NGNX配置 :

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;
        }
}

@tirtha-r 解决方案对我有效

#!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)

我的请求和回应:

curl -X GET http://test.api

{
    "ip": "Client Ip......"
}
bfontaine pixellab
Reply   •   4 楼
bfontaine pixellab    9 年前

httpbin.org 使用此方法:

return jsonify(origin=request.headers.get('X-Forwarded-For', request.remote_addr))
Loïc
Reply   •   5 楼
Loïc    8 年前

可以使用以下代码段检索用户的IP地址:

from flask import request
print(request.remote_addr)
Mekicha
Reply   •   6 楼
Mekicha    8 年前

代理可以使这有点棘手,请确保检查 ProxyFix ( Flask docs )如果你在用的话。看一看 request.environ 在你特定的环境中。有了nginx,我有时会这样做:

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

当代理(如nginx)转发地址时,它们通常会在请求头的某个位置包含原始ip。

更新 See the flask-security implementation . 同样,在实现之前,请查看有关proxyfix的文档。您的解决方案可能因您的特定环境而异。

Chiedo
Reply   •   7 楼
Chiedo    12 年前

实际上,您会发现,当简单地获取以下内容时,将获得服务器的地址:

request.remote_addr

如果需要客户端的IP地址,请使用以下地址:

request.environ['REMOTE_ADDR']
Tarantula
Reply   •   8 楼
Tarantula    13 年前

请参阅上的文档 how to access the Request object 然后从同一个请求对象获取 remote_addr .

代码示例

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

有关详细信息,请参见 Werkzeug documentation .