在Ruby on Rails中,我如何获取客户端的IP地址?我希望当用户访问某个页面时,Rails会获取他们的IP地址并将其显示在屏幕上。
在我的控制器中,我尝试过:
request.remote_ip
但它返回::1
据我所知是IPv6。我想获取客户端的IPv4地址。我怎样才能做到这一点?我只需要为每个客户端执行一次,因为我只检查他们用来访问我的页面的第一个设备的IP地址。
答案 0 :(得分:2)
您可以使用
request.ip
返回ip,是否是本地代理ip
地址(本地主机地址)与否。request.remote_ip
更聪明,并获取客户端的IP地址
在本地代理之外,这是对所有可用IP地址信息的最佳解释,它将做出最佳猜测。(
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。