在Rails和输出中获取客户端IP地址以查看

时间:2017-05-10 12:03:48

标签: ruby-on-rails ruby client ip-address ipv6

在Ruby on Rails中,我如何获取客户端的IP地址?我希望当用户访问某个页面时,Rails会获取他们的IP地址并将其显示在屏幕上。

在我的控制器中,我尝试过:

request.remote_ip

但它返回::1据我所知是IPv6。我想获取客户端的IPv4地址。我怎样才能做到这一点?我只需要为每个客户端执行一次,因为我只检查他们用来访问我的页面的第一个设备的IP地址。

2 个答案:

答案 0 :(得分:2)

您可以使用

  1. request.ip返回ip,是否是本地代理ip 地址(本地主机地址)与否。
  2. request.remote_ip更聪明,并获取客户端的IP地址 在本地代理之外,这是对所有可用IP地址信息的最佳解释,它将做出最佳猜测。
  3.   

    request.remote_ip)确定原始IP地址。 REMOTE_ADDR是标准但是   如果用户在代理后面,则会失败。 HTTP_CLIENT_IP和/或   HTTP_X_FORWARDED_FOR由代理设置,因此检查这些if   REMOTE_ADDR是一个代理。 HTTP_X_FORWARDED_FOR可以是逗号分隔的   在多个链式代理的情况下列出;最后一个地址   不信任是原始IP。

答案 1 :(得分:1)

您确定::1还不够吗?那是当地的主人;如果您将站点发布到需要第3层传输的任何地方,它应分别呈现相应的IPv4或IPv6地址。

简而言之,如果禁用本地IPv6堆栈,则会渲染127.0.0.1。