我需要获得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 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
require 'socket'; Socket.getifaddrs.map(&:addr).select(&:ipv4?).map(&:ip_address).select { |x| x !~ /\A127/ }