Module: Mac

Extended by:
Mac
Included in:
Mac
Defined in:
lib/macaddr.rb

Overview

Cross platform MAC address determination.

To return the first MAC address on the system:

Mac.address

To return an array of all MAC addresses:

Mac.addresses

Constant Summary collapse

EMPTY_MAC =
/00(?:[^\h]?00){5}(?:[^\h]?00){2}?/.freeze
HWADDR_REGEX =
/hwaddr=([\h:]+)/.freeze
WINDOWS_REGEX =
/win(32|dows|ce)|(ms|cyg|bcc)win|mingw32|djgpp/i.freeze
LOOSE_MAC_REGEX =

EUI48 and EUI64

/\h\h(?:[^\h]\h\h){5}(?:[^\h]\h\h){2}?/.freeze
EXACT_MAC_REGEX =
/\A#{LOOSE_MAC_REGEX}\z/.freeze

Instance Method Summary collapse

Instance Method Details

#addressString Also known as: mac_address, addr

Returns First hardware address, in no particular order (varies by system).

Returns:

  • (String)

    First hardware address, in no particular order (varies by system)



20
21
22
# File 'lib/macaddr.rb', line 20

def address
  addresses.first
end

#addressesArray<String> Also known as: addrs

Returns All hardware address, in no particular order (varies by system).

Returns:

  • (Array<String>)

    All hardware address, in no particular order (varies by system)



26
27
28
# File 'lib/macaddr.rb', line 26

def addresses
  iface_macs.values.compact || []
end

#iface_macsHash<String,[String,nil]>

Returns all interfaces as keys, values are MAC addresses ((if present).

Returns:

  • (Hash<String,[String,nil]>)

    all interfaces as keys, values are MAC addresses ((if present)



45
46
47
48
49
50
51
# File 'lib/macaddr.rb', line 45

def iface_macs
  h = iface_macs_raw.map do |k, v|
    v = nil unless valid_mac? v
    [k, v]
  end
  Hash[h]
end

#ifaddrsArray<Ifaddr>

Return all interface Ifaddrs

Returns:

  • (Array<Ifaddr>)

    Return all interface Ifaddrs



35
36
37
38
39
40
41
# File 'lib/macaddr.rb', line 35

def ifaddrs
  return [] if !Socket.respond_to?(:getifaddrs) || iface_packet_family.nil?
  Socket.getifaddrs.select do |iface|
    next unless iface.addr && iface.addr.respond_to?(:pfamily)
    iface.addr.pfamily == iface_packet_family
  end
end