module PacketGen::Header

Namespace for protocol header classes.

This namespace handles all buitlin headers, such as {IP} or {TCP}.

Add a foreign header class

PacketGen permits adding you own header classes. First, define the new header class. By example:

module MyModule
  class MyHeader < PacketGen::Header::Base
    define_field :field1, PacketGen::Types::Int32
    define_field :field2, PacketGen::Types::Int32
  end
 end

Then, class must be declared to PacketGen:

PacketGen::Header.add_class MyModule::MyHeader

Finally, bindings must be declared:

# bind MyHeader as IP protocol number 254 (needed by Packet#parse and Packet#add)
PacketGen::Header::IP.bind_header MyModule::MyHeader, protocol: 254

And use it:

pkt = Packet.gen('IP').add('MyHeader', field1: 0x12345678)
pkt.myheader.field2.read 0x01

@author Sylvain Daubert

Public Class Methods

add_class(klass) click to toggle source

Add a foreign header class to known header classes. This is needed by {Packet.gen} and {Packet#add}. @param [Class] klass a header class @return [void] @since 1.1.0

# File lib/packetgen/header.rb, line 50
def add_class(klass)
  protocol_name = klass.protocol_name
  @added_header_classes[protocol_name] = klass
  @header_classes = nil
end
all() click to toggle source

List all available headers. @return [Array<Class>]

# File lib/packetgen/header.rb, line 38
def all
  return @header_classes if defined?(@header_classes) && @header_classes

  @header_classes = @added_header_classes.values
end
Also aliased as: list
get_header_class_by_name(name) click to toggle source

Get header class from its name @param [String] name @return [Class,nil] @since 1.1.0

# File lib/packetgen/header.rb, line 71
def get_header_class_by_name(name)
  if Header.const_defined? name
    Header.const_get name
  else
    @added_header_classes[name]
  end
end
list()
Alias for: all
remove_class(klass) click to toggle source

Remove a foreign header (previously added by {.add_header_class} from known header classes. @param [Class] klass @return [void] @since 1.1.0

# File lib/packetgen/header.rb, line 61
def remove_class(klass)
  protocol_name = klass.protocol_name
  @added_header_classes.delete protocol_name
  @header_classes = nil
end