Module: MacAddress

Defined in:
lib/mac-address.rb,
lib/mac-address/version.rb

Overview

Cross platform MAC address determination. Works for:

  • /sbin/ifconfig

  • /bin/ifconfig

  • ifconfig

  • ipconfig /all

  • cat /sys/class/net/*/address

To return the first MAC address on the system:

MacAddress.address

To return an array of all MAC addresses:

MacAddress.address.list

Constant Summary collapse

RE =
%r/(?:[^:\-]|\A)(?:[0-9A-F][0-9A-F][:\-]){5}[0-9A-F][0-9A-F](?:[^:\-]|\Z)/io
VERSION =
'1.6.3'

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.mac_addressObject

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



33
34
35
# File 'lib/mac-address.rb', line 33

def mac_address
  @mac_address
end

Class Method Details

.addressObject Also known as: addr

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


41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/mac-address.rb', line 41

def address
  return @mac_address if defined? @mac_address and @mac_address
  re = %r/[^:\-](?:[0-9A-F][0-9A-F][:\-]){5}[0-9A-F][0-9A-F][^:\-]/io
  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

.parse(output) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/mac-address.rb', line 59

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

.versionObject



26
27
28
# File 'lib/mac-address.rb', line 26

def version
  VERSION
end