class PacketFu::EthOui

EthOui is the Organizationally Unique Identifier portion of a MAC address, used in EthHeader.

See the OUI list at standards.ieee.org/regauth/oui/oui.txt

Header Definition

Integer  :b0
Integer  :b1
Integer  :b2
Integer  :b3
Integer  :b4
Integer  :b5
Integer  :local
Integer  :multicast
Int16    :oui,       Default: 0x1ac5 :)

Public Class Methods

new(args={}) click to toggle source

EthOui is unusual in that the bit values do not enjoy StructFu typing.

Calls superclass method
# File lib/packetfu/protos/eth/header.rb, line 20
def initialize(args={})
  args[:local] ||= 0
  args[:oui] ||= 0x1ac # :)
  args.each_pair {|k,v| args[k] = 0 unless v}
  super(args[:b5], args[:b4], args[:b3], args[:b2],
        args[:b1], args[:b0], args[:local], args[:multicast],
        args[:oui])
end

Public Instance Methods

read(str) click to toggle source

Reads a string to populate the object.

# File lib/packetfu/protos/eth/header.rb, line 44
def read(str)
  force_binary(str)
  return self if str.nil?
  if 1.respond_to? :ord
    byte = str[0].ord
  else
    byte = str[0]
  end
  self[:b5] =        byte & 0b10000000 == 0b10000000 ? 1 : 0
  self[:b4] =        byte & 0b01000000 == 0b01000000 ? 1 : 0
  self[:b3] =        byte & 0b00100000 == 0b00100000 ? 1 : 0
  self[:b2] =        byte & 0b00010000 == 0b00010000 ? 1 : 0
  self[:b1] =        byte & 0b00001000 == 0b00001000 ? 1 : 0
  self[:b0] =        byte & 0b00000100 == 0b00000100 ? 1 : 0
  self[:local] =     byte & 0b00000010 == 0b00000010 ? 1 : 0
  self[:multicast] = byte & 0b00000001 == 0b00000001 ? 1 : 0
  self[:oui] =       str[1,2].unpack("n").first
  self
end
to_s() click to toggle source

Returns the object in string form.

# File lib/packetfu/protos/eth/header.rb, line 30
def to_s
  byte = 0
  byte += 0b10000000 if b5.to_i == 1
  byte += 0b01000000 if b4.to_i == 1
  byte += 0b00100000 if b3.to_i == 1
  byte += 0b00010000 if b2.to_i == 1
  byte += 0b00001000 if b1.to_i == 1
  byte += 0b00000100 if b0.to_i == 1
  byte += 0b00000010 if local.to_i == 1
  byte += 0b00000001 if multicast.to_i == 1
  [byte,oui].pack("Cn")
end