【问题标题】:How to get the IP address of my local machine in Ruby?如何在 Ruby 中获取本地机器的 IP 地址?
【发布时间】:2012-12-10 18:06:12
【问题描述】:

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

我想在一个文件中捕获我的本地 IP 地址,而不是我使用 ifconfig 获得的环回 127.0.0.1。请提出解决方案。

【问题讨论】:

标签: ruby ip-address


【解决方案1】:

使用Socket::ip_address_list

Socket.ip_address_list #=> Array of AddrInfo

【讨论】:

  • 您能否建议我们如何从使用“Socket.ip_address_list #=> Array of AddrInfo”获得的数组中获取第二个值。我没有以正常的方式得到那个。谢谢
  • 第二个并不总是合适的。您可能有许多不同的接口和环回。您可以使用以下代码拒绝所有“本地”地址并公开第一个外部Socket.ip_address_list.find {|a| a.ipv4? ? !(a.ipv4_private? || a.ipv4_loopback?) : !(a.ipv6_sitelocal? || a.ipv6_linklocal? || a.ipv6_loopback?) }
  • 究竟是什么不起作用?请提供您的 AddrInfo 数组。可能是你的机器没有自己的远程ip,所以你需要删除ipv4_private?和 ipv6_sitelocal?从条件中获取本地子网 ip。
  • OP 请求本地 IP(假设是 IPv4),所以:puts Socket.ip_address_list.find { |a| a.ipv4_private? && !a.ipv4_loopback? }.ip_address
【解决方案2】:

这是我的第一种方式:

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

【讨论】:

  • 您能否建议我们如何从使用“Socket.ip_address_list #=> Array of AddrInfo”获得的数组中获取第二个值。我没有以正常的方式得到那个。谢谢
【解决方案3】:

写下方法

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2010-09-12
    • 2011-01-02
    • 2010-09-17
    • 2014-06-09
    • 1970-01-01
    • 2014-06-26
    相关资源
    最近更新 更多