【问题标题】:Ruby on Rails - User IP is different than actual device IPRuby on Rails - 用户 IP 与实际设备 IP 不同
【发布时间】:2021-07-03 15:00:19
【问题描述】:

我正在 Heroku 服务器上使用 ruby​​ on rails 构建一个站点,以根据用户的位置向用户提供内容。我正在使用 ipinfo_io 通过request.env['ipinfo'].iprequest.env['ipinfo'].loc 提取用户的IP 和位置 然后我通过 ruby​​ geocoder gem 对request.env['ipinfo'].loc 进行地理编码。我正在使用 google api 对位置进行地理编码。

这一切都很好。我遇到问题的地方是当我提取 IP 地址时。查看我的家用设备上的日志和测试,GET 请求是在与我的家用设备不同的 IP 地址上完成的。

我的家庭设备 ip 将是 136.xx.xx.xxx,而 GET 请求 ip 将是 198.xx.xx.xxx,这与我目前所在的位置相去甚远。如何设置我的环境以获取正确的 IP?

我已将我的正确 ip 和 GET ip 放在下面的日志中:

info method=GET path="/favicon.ico" host=www.example.com fwd="136.xx.xx.xxx,172.xx.xx.xx" dyno=web.1 connect=1ms service=8ms status=200 bytes=143 protocol=https
INFO -- : Started GET "/" for 198.xx.xx.xx at 2021-04-07 17:49:01 +0000

Rails 版本 6.0.3.4 红宝石版本 2.6.3

【问题讨论】:

  • 不清楚您在问什么或“我的家庭设备 ip 将是 136.xx.xx.xxx 并且 GET 请求 ip 将是 198.xx.xx.xxx”的意思。您是在谈论您的 Intranet IP(网络)与 Internet IP(公共)吗?您是否使用会导致此问题的 VPN?您如何“连接”到应用程序?应用程序是否托管?我们需要更多详细信息来了解您实际遇到的情况以及您希望如何解决此问题。
  • 要获得准确的地理位置,您应该使用 HTML 位置 API
  • 为什么您认为您的家庭 IP 应该在 136.x.x.x 范围内?你是怎么确定的?为什么你认为 109.x.x.x 离你不远?我猜想 136.x.x.x 可能是你的外部 IP 地址,它是从你的 ISP 分配给你的路由器的。但是您很可能在本地网络内部使用不同的 IP 范围,该范围是从路由器分配给设备的。 198.x.x.x 是为专用网络保留的 IP 范围,路由器经常为此目的使用它。
  • @spickermann 192.168.0.0/16 已保留。 198.x.x.x 不是私有地址空间。
  • @tadman 维基百科的文章告诉我们 198.x.x.x 的部分内容也保留给专用网络。

标签: ruby-on-rails ruby ip geocoding rails-geocoder


【解决方案1】:

【讨论】:

  • 这应该可以解决问题。看到的 ip 是 Heroku 的代理或负载均衡器的 IP。 remote_ip 应该查看请求头并获取客户端的转发 ip。
  • 感谢您的建议。我已经尝试过了,甚至这个助手也没有给我我需要的原始 IP。基于这个article,我发现我可以使用request.env['HTTP_X_FORWARDED_FOR'] 来获取正确的源IP,但现在我不确定如何将它传递给IPInfo 以获取位置,或者ipinfo-rails gem 是否已经有一些可以拉那个给我。找到答案后会给出答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多