2016-08-23 245 views
0

我需要獲取每個網絡接口的IP地址。問題是標準ruby方法Socket.ip_address_list僅向我返回地址列表,但沒有關於哪個接口對應於IP地址的信息。在Ruby上獲取特定網絡接口的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地址?

+0

試試這個http://www.rubydoc.info/gems/ethernet/0.1.3/Ethernet/Devices – chenchuk

回答

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 
+0

如果你還在使用Ruby 1.9的你靠借來的時間生活,它不再接收更新。通常從1.9升級到2.x是相對無痛的,但你必須嘗試看看你有多少摩擦。 – tadman