Sha256: 59282d113f9511dc866844651ddd31d7de3d094744b70ebb028e11aa461497bc

Contents?: true

Size: 1.71 KB

Versions: 9

Compression:

Stored size: 1.71 KB

Contents

##
# Cross platform MAC address determination.  Works for:
# * /sbin/ifconfig
# * /bin/ifconfig
# * ifconfig
# * ipconfig /all
#
# To return the first MAC address on the system:
#
#   Mac.address
#
# To return an array of all MAC addresses:
#
#   Mac.address.list

module Mac
  VERSION = '1.0.0'

  def Mac.version() ::Mac::VERSION end

  class << self

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

    attr_accessor "mac_address"

    ##
    # 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

    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'

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

      lines = nil
      cmds.each do |cmd|
        stdout = IO.popen("#{ cmd } 2> #{ null }"){|fd| fd.readlines} rescue next
        next unless stdout and stdout.size > 0
        lines = stdout and break
      end
      raise "all of #{ cmds.join ' ' } failed" unless lines

      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 }

      @mac_address = maddr
    end

    ##
    # Shorter alias for #address

    alias_method "addr", "address"
  end
end

Version data entries

9 entries across 9 versions & 2 rubygems

Version Path
gemrage-1.0.0 vendor/ruby/1.8/gems/macaddr-1.0.0/lib/macaddr.rb
gemrage-0.4.1 vendor/ruby/1.8/gems/macaddr-1.0.0/lib/macaddr.rb
gemrage-0.4.0 vendor/ruby/1.8/gems/macaddr-1.0.0/lib/macaddr.rb
gemrage-0.3.2 vendor/ruby/1.8/gems/macaddr-1.0.0/lib/macaddr.rb
gemrage-0.3.1 vendor/ruby/1.8/gems/macaddr-1.0.0/lib/macaddr.rb
gemrage-0.3.0 vendor/ruby/1.8/gems/macaddr-1.0.0/lib/macaddr.rb
gemrage-0.2.0 vendor/ruby/1.8/gems/macaddr-1.0.0/lib/macaddr.rb
gemrage-0.1.2 vendor/ruby/1.8/gems/macaddr-1.0.0/lib/macaddr.rb
macaddr-1.0.0 lib/macaddr.rb