class Inspec::Resources::BsdInterface
Public Instance Methods
interface_info(iface)
click to toggle source
# File lib/inspec/resources/interface.rb, line 111 def interface_info(iface) cmd = inspec.command("ifconfig #{iface}") return nil if cmd.exit_status.to_i != 0 lines = cmd.stdout.split("\n") iface_info = { name: iface, ipv4_addresses: [], # Actually CIDRs ipv6_addresses: [], # are expected to go here } iface_info[:up] = lines[0].include?("UP") lines.each do |line| # IPv4 case m = line.match(/^\s+inet\s+((?:\d{1,3}\.){3}\d{1,3})\s+netmask\s+(0x[a-f0-9]{8})/) if m ip = m[1] hex_mask = m[2] cidr = hex_mask.to_i(16).to_s(2).count("1") iface_info[:ipv4_addresses] << "#{ip}/#{cidr}" next end # IPv6 case m = line.match(/^\s+inet6\s+([a-f0-9:]+)%#{iface}\s+prefixlen\s+(\d+)/) if m ip = m[1] cidr = m[2] iface_info[:ipv6_addresses] << "#{ip}/#{cidr}" next end # Speed detect, crummy - can't detect wifi, finds any number in the string # Ethernet autoselect (1000baseT <full-duplex>) m = line.match(/^\s+media:\D+(\d+)/) if m iface_info[:speed] = m[1].to_i next end end iface_info end