在 Flask 中使用开发服务器时获取客户端 IP 地址

Posted

技术标签:

【中文标题】在 Flask 中使用开发服务器时获取客户端 IP 地址【英文标题】:Getting Client IP address while using development server in Flask 【发布时间】:2019-11-18 10:21:34 【问题描述】:

我在做什么

我有一个烧瓶网站,我正在使用 ngrok 隧道让客户可以访问它。

我想要什么

我正在尝试获取客户端的 IP 地址。

到目前为止我做了什么

到目前为止,我已经尝试过这些,

request.environ.get('HTTP_X_REAL_IP', request.remote_addr)

request.environ['REMOTE_ADDR']

但他们都返回 127.0.0.1。我也检查了这个question 但它并没有帮助我,因为那里写的答案是为了在生产服务器环境中获取客户端 IP,而我正在寻找任何可以在开发中获取客户端 IP 地址的方法使用 ngrok 建立隧道的服务器模式。

我想到了两种可能的方法,

如果我能从 Ngrok 获得连接请求者的 IP 地址。我不知道有什么办法,但这可以解决我的问题。 或者我在我的 javascript 代码中添加一些内容,这样每当索引页面加载时,它就会向服务器发送一个 ajax 请求,告诉它客户端的 IP 地址。 (如有错误请指正)

【问题讨论】:

可以使用this question捕捉前面的IP地址,然后用AJAX发回服务器。 【参考方案1】:

在 Flask 的情况下,您无法直接在服务器端获取客户端 IP 地址,但如果您的 Web 应用程序获取客户端 IP 然后使用 AJAX 请求将其发送回服务器,则您无法获取 IP 地址,以便您可以记录它。 这是我认为你可以在烧瓶中做到这一点的唯一可能方式。

【讨论】:

感谢您的回答。我已经使用您建议的相同方式修复了此问题。+

以上是关于在 Flask 中使用开发服务器时获取客户端 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

如何在开发过程中获取客户端的ip呢?

服务器端获取客户端的IP地址(当客户端调用由Axis开发的WebService)

Python Flask获取用户的IP [重复]

如何限制单个 IP 地址对 Flask 的访问?

如何在Laravel 5+中获取客户端IP地址?

使用 mode_proxy_wstunnel 时获取客户端 IP