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

问题描述 投票:0回答:2

我需要获得IP地址,我的每个网络接口。问题是,标准的Ruby方法Socket.ip_address_list只返回给我ADRESS名单,但没有哪个接口信息对应的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>

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

我怎么能知道一个特定的网络接口的IP地址?

ruby linux
2个回答
1
投票

请让我知道如果有一种方式来获得这些信息使用Ruby 1.9.x的

我更新的Ruby 2.3的版本,然后使用Socket.getifaddrs(可用自红宝石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

输出:

$ 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

1
投票

One-liner

require 'socket'; Socket.getifaddrs.map(&:addr).select(&:ipv4?).map(&:ip_address).select { |x| x !~ /\A127/ }

推荐问答