2016-05-09 168 views
0

根據Ruby - Platform independent way to determine IPs of all network interfaces?,我們知道「從Ruby 2.1開始,Socket#getifaddrs可用」,甚至還有一個如何使用它來獲取機器IP的代碼示例。如何在Ruby中獲取系統的IP地址(和)相關的MAC地址?

macaddr gem,有一些代碼來找到MAC地址,也使用Socket#getifaddrs。

但是,把這兩者結合起來就是我的頭腦。

所需的輸出是:

{name: {physical_address: macaddress, ip_addresses: [ip1, ip2, ip3..]}} 

其中:

  • name是每個設備的名稱(如 'EN0', 'EN1' 等上)
  • macaddress是MAC地址(如00:28:00:43:37:eb
  • ip_addresses是一個數組,其中包含與該MAC地址關聯的所有IP地址ess

我們如何使用我們所需的工具將所有零件連接在一起?

回答

1

您可以從Socket.getifaddrs元素提取接口名稱:

require 'socket' 
Socket.getifaddrs.each { |if_addr| puts if_addr.name } 

以類似的方式,你還可以得到相關的名字去的IP地址:

require 'socket' 
Socket.getifaddrs.each do |if_addr| 
    next unless if_addr.addr.ipv4? 
    puts "#{if_addr.name} => #{if_addr.addr.ip_address.to_s}" 
end 

最後或多或少MAC地址相同:

require 'socket' 
Socket.getifaddrs.each do |if_addr| 
    next unless if_addr.addr.pfamily == Socket::PF_LINK 
    puts "#{if_addr.name} => #{if_addr.addr.getnameinfo}" 
end 

注意:某些接口不能有M AC地址返回空陣列

你只需要加入它有你的哈希:)