获取 Ruby 上特定网络接口的 IP 地址

Alb*_*era 4 ruby linux

我需要获取每个网络接口的 IP 地址。问题是标准的 ruby​​ 方法Socket.ip_address_list只返回给我地址列表,但没有关于哪个接口对应于 IP 地址的信息。

#<Addrinfo: 127.0.0.1>
#<Addrinfo: 192.168.13.175>
#<Addrinfo: 172.17.0.1>
#<Addrinfo: ::1>
#<Addrinfo: fe80::4685:ff:fe0d:c406%wlan0>
Run Code Online (Sandbox Code Playgroud)

我基本上是在寻找 NodeJS 的等价物os.networkInterfaces()[interfaceName]

如何知道特定网络接口的 IP 地址?

Alb*_*era 5

请告诉我是否有办法使用 Ruby 1.9.X 获取此信息

我将Ruby更新到2.3版本然后使用Socket.getifaddrs(从Ruby 2.1开始可用)。

require 'socket'
addr_infos = Socket.getifaddrs
addr_infos.each do |addr_info|
    if addr_info.addr
        puts "#{addr_info.name} has address #{addr_info.addr.ip_address}" if addr_info.addr.ipv4?
    end
end
Run Code Online (Sandbox Code Playgroud)

输出:

$ ruby2.3 getInterfaces.rb 
lo has address 127.0.0.1
wlan0 has address 192.168.13.175
docker0 has address 172.17.0.1
Run Code Online (Sandbox Code Playgroud)