根据Ruby - Platform independent way to determine IPs of all network interfaces?,我们知道“从Ruby 2.1开始,Socket#getifaddrs可用”,甚至还有一个代码示例,说明如何使用它来获取机器的IP。
从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地址的数组我们如何使用我们所拥有的工具将所有部分连接在一起?
答案 0 :(得分:1)
您可以从Socket.getifaddrs元素中提取接口名称:
require 'socket'
Socket.getifaddrs.each { |if_addr| puts if_addr.name }
以类似的方式,您还可以获得与名称相关的de 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
注意:某些接口无法使用MAC地址返回空数组
你只需加入它就有你的哈希:)