Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ruby中获取本地计算机的IP地址?_Ruby_Ip Address - Fatal编程技术网

如何在Ruby中获取本地计算机的IP地址?

如何在Ruby中获取本地计算机的IP地址?,ruby,ip-address,Ruby,Ip Address,我正在Ubuntu 12.04LTS操作系统中进行Rails开发 我想在文件中捕获我的本地IP地址,而不是使用ifconfig获取的环回127.0.0.1。请建议解决方案。使用 这是我的第一条路: require 'socket' def local_ip orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true # turn off reverse DNS resolution tempora

我正在Ubuntu 12.04LTS操作系统中进行Rails开发

我想在文件中捕获我的本地IP地址,而不是使用
ifconfig
获取的环回127.0.0.1。请建议解决方案。

使用

这是我的第一条路:

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

# irb:0> local_ip
# => "192.168.0.127"
这是我的第二种方式,不推荐:

require 'socket'
 Socket::getaddrinfo(Socket.gethostname,”echo”,Socket::AF_INET)[0][3]
第三种方式:

 UDPSocket.open {|s| s.connect('64.233.187.99', 1); s.addr.last }
第四种方式:

Use Socket#ip_address_list

Socket.ip_address_list #=> Array of AddrInfo
写下面的方法

def self.local_ip
    orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true
    UDPSocket.open do |s|
      s.connect '64.233.187.99', 1
      s.addr.last
    end
    ensure
      Socket.do_not_reverse_lookup = orig
 end
然后调用local_ip方法,您将获得您机器的ip地址

Eg: ip_address= local_ip

您只需使用
request.remote_ip
ref[this][1][1]:@Salil:这将始终给出127.0.0.1作为o/p。但是,我需要为'ifconfig'命令获取的internet IP地址。谢谢。请检查。您能建议我们如何使用“Socket.ip_address_list#=>AddrInfo数组”从数组中获取第二个值吗。我不是以正常的方式得到的。谢谢。请建议如何使用“Socket.ip_address_list#=>AddrInfo数组”从数组中获取第二个值。我不是以正常的方式得到的。谢谢,第二次并不总是合适的。您可能有许多不同的接口和环回。您可以使用以下代码拒绝所有“本地”地址并公开第一个外部
Socket.ip\u地址列表。查找{a.ipv4!(a.ipv4\u private?| a.ipv4\u环回?)!(a.ipv6\u sitelocal?| a.ipv6\u linklocal?| a.ipv6\u环回?}
到底什么不起作用?请提供您的AddrInfo数组。可能是您的计算机没有远程ip,所以您需要删除ipv4\u私有?ipv6是本地的吗?从条件中获取本地子网ip。
Eg: ip_address= local_ip