如何在Ruby中获取系统的IP地址和(他们)相关的MAC地址?

时间:2016-05-09 23:23:54

标签: ruby

根据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地址的数组

我们如何使用我们所拥有的工具将所有部分连接在一起?

1 个答案:

答案 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地址返回空数组

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