module Mac

Constants

RE
VERSION

Attributes

mac_address[RW]

Accessor for the system's first MAC address, requires a call to address first

Public Class Methods

address() click to toggle source

Discovers and returns the system's MAC addresses. Returns the first MAC address, and includes an accessor list for the remaining addresses:

Mac.addr # => first address
Mac.addr.list # => all addresses
# File lib/macaddr.rb, line 54
def address
  return @mac_address if defined? @mac_address and @mac_address
  re = /[^:\-](?:[0-9A-F][0-9A-F][:\-]){5}[0-9A-F][0-9A-F][^:\-]/o
  cmds = '/sbin/ifconfig', '/bin/ifconfig', 'ifconfig', 'ipconfig /all', 'cat /sys/class/net/*/address'

  null = test(e, '/dev/null') ? '/dev/null' : 'NUL'

  output = nil
  cmds.each do |cmd|
    status, stdout, stderr = systemu(cmd) rescue next
    next unless stdout and stdout.size > 0
    output = stdout and break
  end
  raise "all of #{ cmds.join ' ' } failed" unless output

  @mac_address = parse(output)
end
dependencies() click to toggle source
# File lib/macaddr.rb, line 32
def Mac.dependencies
  {
    'systemu' => [ 'systemu' , '~> 2.5.0' ]
  }
end
list() click to toggle source
# File lib/macaddr.rb, line 83
def list() @list end
parse(output) click to toggle source
# File lib/macaddr.rb, line 72
def parse(output)
  lines = output.split(/\n/)

  candidates = lines.select{|line| line =~ RE}
  raise 'no mac address candidates' unless candidates.first
  candidates.map!{|c| c[RE].strip}

  maddr = candidates.first
  raise 'no mac address found' unless maddr

  maddr.strip!
  maddr.instance_eval{ @list = candidates; def list() @list end }
  maddr
end
version() click to toggle source
# File lib/macaddr.rb, line 28
def Mac.version
  ::Mac::VERSION
end