我正在做一个网站,用户可以登录和下载文件,使用Flask微框架(基于Werkzeug),它使用Python(在我的情况下是2.6)。

我需要在用户登录时获得用户的IP地址(用于登录目的)。 有人知道怎么做吗?肯定有一种方法可以用Python来实现吗?


当前回答

如果你使用Gunicorn和Nginx环境,那么下面的代码模板适合你。

addr_ip4 = request.remote_addr

其他回答

如果你使用Gunicorn和Nginx环境,那么下面的代码模板适合你。

addr_ip4 = request.remote_addr

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

from flask import request
print(request.remote_addr)

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

注意,这段代码是在服务器端运行的。

from mod_python import apache

req.get_remote_host(apache.REMOTE_NOLOOKUP)

如果你在其他平衡器后面使用Nginx,例如AWS Application balancer, HTTP_X_FORWARDED_FOR会返回地址列表。可以这样固定:

if 'X-Forwarded-For' in request.headers:
    proxy_data = request.headers['X-Forwarded-For']
    ip_list = proxy_data.split(',')
    user_ip = ip_list[0]  # first address in list is User IP
else:
    user_ip = request.remote_addr  # For local development

Httpbin.org使用这个方法:

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