module Interfacez

Constants

VERSION

Public Class Methods

all() { |addr| ... } click to toggle source

All network interface names available on system.

# File lib/interfacez.rb, line 80
def self.all
  addrs = raw_interface_addresses.collect { |iface| iface.name }.uniq 
  if block_given?
    addrs.each do |addr|
      yield addr
    end
  end
  return addrs
end
default() click to toggle source

Emulated LibPcap's pcap_lookupdev function to find the default device on which to capture packets.

# File lib/interfacez.rb, line 8
def self.default
  raw_interface_addresses.each do |iface| 
    next unless iface.broadaddr
    return iface.name 
  end
  nil
end
index_of(interface) click to toggle source

Get index of network interface.

# File lib/interfacez.rb, line 183
def self.index_of(interface)
  raw_interface_addresses.each do |iface|
    return iface.ifindex if iface.name == interface
  end
  return nil
end
ipv4_address_of(interface) click to toggle source

Return all ipv4 addresses of a given interface.

# File lib/interfacez.rb, line 110
def self.ipv4_address_of(interface)
  addresses = Interfacez.ipv4_addresses[interface]
  return nil if addresses.nil?
  return addresses[0]
end
ipv4_addresses(interface = nil) { |result| ... } click to toggle source

Network interfaces with their ipv4 addresses, if they have any asscoited with it.

# File lib/interfacez.rb, line 92
def self.ipv4_addresses(interface = nil)
  return ipv4_addresses_of(interface) unless interface.nil?
  results = Hash.new()
  raw_interface_addresses.each do |iface|
    if iface.addr.ipv4?
      results[iface.name] = [] unless results[iface.name]
      results[iface.name] << iface.addr.ip_address
    end
  end
  if block_given?
    results.each do |result|
      yield result
    end
  end
  return results
end
ipv4_addresses_of(interface) click to toggle source

Return the first ipv4 address of a given interface.

# File lib/interfacez.rb, line 117
def self.ipv4_addresses_of(interface)
  return Interfacez.ipv4_addresses[interface] || []
end
ipv4_loopback() click to toggle source

First available ipv4 loopback interface.

# File lib/interfacez.rb, line 42
def self.ipv4_loopback
  Interfacez.ipv4_loopbacks { |iface| return iface }
end
ipv4_loopbacks() { |name| ... } click to toggle source

All ipv4 loopback interfaces.

# File lib/interfacez.rb, line 47
def self.ipv4_loopbacks
  if block_given?
    raw_interface_addresses.each do |iface| 
      next unless iface.addr.ipv4_loopback?
      yield iface.name if block_given?
    end
  else
    results = []
    Interfacez.ipv4_loopbacks { |l| results << l }
    return results 
  end
end
ipv6_address_of(interface) click to toggle source

Return the first ipv6 address of a given interface.

# File lib/interfacez.rb, line 146
def self.ipv6_address_of(interface)
  addresses = Interfacez.ipv6_addresses_of(interface)
  return nil if addresses.nil? 
  return addresses[0]
end
ipv6_addresses(interface = nil) { |result| ... } click to toggle source

Network interfaces with their ipv6 addresses, if they have any asscoited with it.

# File lib/interfacez.rb, line 123
def self.ipv6_addresses(interface = nil)
  return ipv6_addresses_of(interface) unless interface.nil?
  results = Hash.new()
  raw_interface_addresses.each do |iface|
    if iface.addr.ipv6?
      results[iface.name] = [] unless results[iface.name]
      results[iface.name] << iface.addr.ip_address
    end
  end
  if block_given?
    results.each do |result|
      yield result
    end
  end
  return results
end
ipv6_addresses_of(interface) click to toggle source

Return all available ipv6 addreses of a given interface.

# File lib/interfacez.rb, line 141
def self.ipv6_addresses_of(interface)
  return Interfacez.ipv6_addresses[interface] || []
end
ipv6_loopback() click to toggle source

First available ipv6 loopback interface.

# File lib/interfacez.rb, line 61
def self.ipv6_loopback
  Interfacez.ipv6_loopbacks { |iface| return iface }
end
ipv6_loopbacks() { |name| ... } click to toggle source

All ipv6 loopback interfaces.

# File lib/interfacez.rb, line 66
def self.ipv6_loopbacks
  if block_given?
    raw_interface_addresses.each do |iface| 
      next unless iface.addr.ipv6_loopback?
      yield iface.name if block_given?
    end
  else
    results = []
    Interfacez.ipv4_loopbacks { |l| results << l }
    return results 
  end
end
loopback() click to toggle source

Get first (ipv4 or ipv6) loopback interface.

# File lib/interfacez.rb, line 17
def self.loopback
  Interfacez.ipv4_loopbacks { |iface| return iface }
  Interfacez.ipv6_loopbacks { |iface| return iface }
end
loopback?() click to toggle source

Check for any (ipv4 or ipv6) loopback interface.

# File lib/interfacez.rb, line 23
def self.loopback?
  Interfacez.ipv4_loopbacks { |iface| return true }
  Interfacez.ipv6_loopbacks { |iface| return true }
  return false
end
loopbacks() { |iface| ... } click to toggle source

Get all (ipv4 or ipv6) loopback interfaces.

# File lib/interfacez.rb, line 30
def self.loopbacks
  if block_given?
    Interfacez.ipv4_loopbacks { |iface| yield iface }
    Interfacez.ipv6_loopbacks { |iface| yield iface }
  else
    loopbacks = []
    Interfacez.loopbacks { |l| loopbacks << l unless loopbacks.any?(l) }
    return loopbacks
  end
end
mac_address_of(interface) click to toggle source

Return first available mac addresses of a given interface.

# File lib/interfacez.rb, line 153
def self.mac_address_of(interface)
  list = Interfacez.mac_addresses_of(interface)
  return nil if list.size.zero?
  return list[0]
end
mac_addresses_of(interface) click to toggle source

Return all available mac addresses of a given interface.

# File lib/interfacez.rb, line 160
def self.mac_addresses_of(interface)
  # BSD support
  if Socket.const_defined? :PF_LINK
    list = raw_interface_addresses.map! do |iface|
      next unless iface.name == interface
      nameinfo = iface.addr.getnameinfo
      if nameinfo.first != "" && nameinfo.last == ""
        nameinfo[0]
      end
    end.compact
  # Linux support
  elsif Socket.const_defined? :PF_PACKET 
    list = raw_interface_addresses.map! do |iface|
      next unless iface.name == interface
      iface.addr.inspect_sockaddr[/hwaddr=([\h:]+)/, 1]
    end.compact
  else
    warn "This platform may not be fully supported!"
    return []
  end
end