2012-08-10 45 views
15

如何使用Rails获取自己的IP地址?获取自己的IP地址

当我做这样的我:127.0.0.1

@ip = request.remote_ip 

有没有什么办法让公网IP?

+1

哪里是你的服务器上运行,并在那里你的浏览器运行您从请求?哪台机器? – 2012-08-10 07:32:17

+1

我的rails服务器通过localhost运行。但我需要获取系统IP?或公共IP? 192.168.2.9是我的私人地址有什么办法得到那个? – amtest 2012-08-10 07:36:17

+1

这是另一个关于此问题:http://stackoverflow.com/questions/5029427/ruby-get-local-ip-nix – 2012-08-10 07:38:48

回答

31

尝试:

require 'socket' 
ip=Socket.ip_address_list.detect{|intf| intf.ipv4_private?} 
ip.ip_address if ip 
+5

一个更简洁的方式来写它将是: 'Socket.ip_address_list.detect(&:ipv4_private?)。试试(:ip_address)' – gnz 2015-03-02 11:24:21

+0

请注意,Socket.ip_address_list是1.9.x – rogerdpack 2015-12-07 08:30:48

0

试试这个:

request.env['REMOTE_ADDR'] 
+0

这些太显示像127.0.0.1 – amtest 2012-08-10 07:38:49

0

呼叫使用你的IP,不是localhost页面。即,192.168.2.9:3000在默认的开发环境的情况下会产生:

request.env['REMOTE_ADDR'] 
#=> 192.168.2.9 

或:

request.remote_ip 
#=> 192.168.2.9 
+1

引入的,不幸的是我相信这些涉及到客户端“发出请求”而不是服务器的IP地址...... – rogerdpack 2015-12-07 08:25:28

0

由于您的要求是本地服务器,则返回“localhost”的地址,即127.0.0.1。 如果您从Internet上托管的计算机请求它,它会为您提供远程服务器的静态IP。

如果你想自己的互联网的静态IP,然后访问http://ping.eu,你可以看到你的公共IP。

1

我相信request.env['SERVER_NAME']的作品,如果你想反映服务器的基址回