python - 从 Flask 中的用户获取正确的 IP 地址

标签 python email ip

我在 StackOverflow 上看到这个帖子:How to find location with IP address in Python?

这个答案对我有用,但到目前为止我只在本地主机上测试过它,我想确保 IP 地址实际上是来自用户的 IP,而不是服务器本身。

我之所以怀疑是因为我尝试了不同的方法来测试这一点

 #I'm using a Mail API, but here I will print for simplicity
'IP-address from user ' + request.remote_addr #retures 127.0.0.1 when running on localhost

每当我尝试使用 ipinfo API 时,我都会从互联网连接获取实际的 IP 地址,而不是从本地主机获取。

url= 'http://ipinfo.io/json'
response = urlopen(url)
data = json.load(response)

IP=data['ip']
org=data['org']
city = data['city']
country=data['country']
region=data['region']  

 print('IP : {4} \nRegion : {1} \nCountry : {2} \nCity : {3} \nOrg : {0}'.format(org,region,country,city,IP))
#returns actual IP-address from my internet connection

如何确保后面的解决方案实际返回用户访问服务的 IP 和位置

最佳答案

request.remote_addr 为您提供请求来源的地址。如果您在本地主机上运行它,那么是的,请求也将来自本地主机,所以这就是您获得的 IP。

如果您的服务器设置为某种特定的代理配置,因此您的服务器看到的所有传入请求都是代理的 IP,那么您应该知道就是这种情况(因为您正在以这种方式设置服务器)并确保代理以其他方式(即 HTTP header )传递访问者的 IP,并专门使用它而不是 request.remote_addr。再说一次,如果您处于这种情况,您就会知道这一点。

当您从服务器向 ipinfo.io 发出请求时,ipinfo.io 会将您的服务器地址视为请求的发起者,并将其用作您的 IP 地址正在询问。由于请求是通过互联网发送的,因此它会看到您的公共(public)互联网地址。如果您希望服务器查询访问者的 IP,那么您的服务器需要在请求中包含访问者的 IP,否则 ipinfo.io 就没有机会知道该 IP。该请求需要如下所示:

url = 'http://ipinfo.io/' + request.remote_addr

关于python - 从 Flask 中的用户获取正确的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52035339/

相关文章:

python /Pillow : How to scale an image

python - 处理回归子样本中的空值

email - 证书过期时数字签名失败

android - 如何在我的 PC 上运行 Apache Tomcat Web 服务器并从真正的 Android 设备访问?

java - 如何使用java实现远程桌面

python - python多处理中的动态工作池管理

Python - 对第二个参数进行排序

email - Grails 邮件连接被拒绝

python - 使用 python 提取电子邮件正文的第一行

php - 将 IPv6 地址与 CIDR 子网匹配