2009-08-04 200 views

回答

35

感谢:karim79和泰坦尼克号。

写控制器

的代码对于客户端IP:

request.remote_ip 

@remote_ip = request.env["HTTP_X_FORWARDED_FOR"] 

对于服务器IP:

require 'socket' 

def local_ip 
    orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true # turn off reverse DNS resolution temporarily 

    UDPSocket.open do |s| 
    s.connect '64.233.187.99', 1 
    s.addr.last 
    end 
ensure 
    Socket.do_not_reverse_lookup = orig 
end 
84

从你的控制器:

request.remote_ip 

如果您在杂种前使用Apache,然后remote_ip将返回的要求,在这种情况下将是本地主机的源地址,因为Apache Web服务器发出请求,这样反而把这个在你的控制器:

@remote_ip = request.env["HTTP_X_FORWARDED_FOR"] 

获取服务器IP看到:

Getting the Hostname or IP in Ruby on Rails

+0

这是工作,但我需要两个客户端IP,也服务器IP在一起 – 2009-08-04 11:36:11

+0

这是因为您的服务器正在将请求代理到rails服务器。您必须设置您的前台服务器(apache或任何您可能拥有的)以发送原始请求的IP。你能提供关于你的配置的更多细节吗? – 2009-08-04 11:40:56