Module: PacketGen::Header

Defined in:
lib/packetgen/header.rb,
lib/packetgen/header/ip.rb,
lib/packetgen/header/arp.rb,
lib/packetgen/header/dns.rb,
lib/packetgen/header/dns.rb,
lib/packetgen/header/esp.rb,
lib/packetgen/header/eth.rb,
lib/packetgen/header/llc.rb,
lib/packetgen/header/tcp.rb,
lib/packetgen/header/tcp.rb,
lib/packetgen/header/udp.rb,
lib/packetgen/header/base.rb,
lib/packetgen/header/icmp.rb,
lib/packetgen/header/ipv6.rb,
lib/packetgen/header/dot11.rb,
lib/packetgen/header/dot1q.rb,
lib/packetgen/header/dot1x.rb,
lib/packetgen/header/dns/rr.rb,
lib/packetgen/header/icmpv6.rb,
lib/packetgen/header/dns/opt.rb,
lib/packetgen/header/dns/name.rb,
lib/packetgen/header/dns/option.rb,
lib/packetgen/header/dot11/data.rb,
lib/packetgen/header/tcp/option.rb,
lib/packetgen/header/tcp/options.rb,
lib/packetgen/header/dns/question.rb,
lib/packetgen/header/dns/qdsection.rb,
lib/packetgen/header/dns/rrsection.rb,
lib/packetgen/header/dot11/control.rb,
lib/packetgen/header/dot11/element.rb,
lib/packetgen/header/dot11/sub_mngt.rb,
lib/packetgen/header/dot11/management.rb

Overview

Namespace for protocol header classes

Add a foreign header class

Since v1.1.0, 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

Defined Under Namespace

Classes: ARP, Base, CipherError, DNS, Dot11, Dot1q, Dot1x, ESP, Eth, ICMP, ICMPv6, IP, IPv6, LLC, PPI, RadioTap, SNAP, TCP, UDP

Constant Summary collapse

PCAP_SNAPLEN =
0xffff
PCAP_PROMISC =
false
PCAP_TIMEOUT =
1

Class Method Summary collapse

Class Method Details

.add_class(klass) ⇒ void

This method returns an undefined value.

Add a foreign header class to known header classes. This is needed by Packet.gen and Packet#add.

Parameters:

  • klass (Class)

    a header class

Since:

  • 1.1.0



50
51
52
53
54
# File 'lib/packetgen/header.rb', line 50

def self.add_class(klass)
  protocol_name = klass.to_s.sub(/.*::/, '')
  @added_header_classes[protocol_name] = klass
  @header_classes = nil
end

.allArray<Class>

Get known header classes

Returns:

  • (Array<Class>)


40
41
42
43
# File 'lib/packetgen/header.rb', line 40

def self.all
  return @header_classes if @header_classes
  @header_classes = @added_header_classes.values
end

.get_header_class_by_name(name) ⇒ Class?

Get header class from its name

Parameters:

  • name (String)

Returns:

  • (Class, nil)

Since:

  • 1.1.0



71
72
73
74
75
76
77
# File 'lib/packetgen/header.rb', line 71

def self.get_header_class_by_name(name)
  if Header.const_defined? name
    Header.const_get name
  else
    @added_header_classes[name]
  end
end

.remove_class(klass) ⇒ void

This method returns an undefined value.

Remove a foreign header (previously added by add_header_class from known header classes.

Parameters:

  • klass (Class)

Since:

  • 1.1.0



61
62
63
64
65
# File 'lib/packetgen/header.rb', line 61

def self.remove_class(klass)
  protocol_name = klass.to_s.sub(/.*::/, '')
  @added_header_classes.delete protocol_name
  @header_classes = nil
end