【发布时间】:2017-10-09 01:44:20
【问题描述】:
在 Ruby on Rails 中,如何获取客户端的 IP 地址?我希望当用户访问某个页面时,Rails 会获取他们的 IP 地址并将其显示在屏幕上。
在我的控制器中我尝试过:
request.remote_ip
但它返回::1,据我所知是IPv6。我想获取客户端的 IPv4 地址。我怎样才能做到这一点?我只需要为每个客户执行一次此操作,因为我只检查他们用来访问我的页面的第一台设备的 IP 地址。
【问题讨论】:
-
IPv6 是要走的路——为什么要改变这个?网络从 IPv4 迁移到 IPv6 是有充分理由的……此外,
remote_ip是(或应该是)最佳猜测方案。在现实世界的通信中,您的应用程序很可能位于代理层(即 nginx 等)之后,并且将根据 HTTP 标头猜测远程 IP 地址。 -
@Myst 在我的环境中,没有使用 IPv6,并且在连接到我们的 VPN 时可能会导致用户出现连接问题。
-
听起来 IPv4 支持可能是要解决的问题......在家连接的人可能会在他们的 ISP 上使用 IPv6。如果不是今天,那么很快。在我看来,将 IPv4 用于除日志记录以外的任何事情都可能会传播问题……尤其是如果它用于确认 VPN 访问,这会引入有关 HTTP 标头伪造的安全问题。
-
@Myst VPN 有自己的网络适配器,它在其中使用 IPv4。对于任何与工作无关的应用程序,操作系统默认设置的任何内容 (IPv6) 都将优先。我们并没有真正禁用 IPv6。我们只是通过应用程序和 vpn 本身使用 IPv4 优先级。如果有人向我们抱怨他们遇到了网络连接问题(以前发生过),那么取消选中网络适配器中的 IPv6 即可解决此问题。
标签: ruby-on-rails ruby client ip-address ipv6