Module: PacketGen::Header
- Defined in:
- lib/packetgen/header.rb,
lib/packetgen/header/ip.rb,
lib/packetgen/header/arp.rb,
lib/packetgen/header/esp.rb,
lib/packetgen/header/eth.rb,
lib/packetgen/header/tcp.rb,
lib/packetgen/header/tcp.rb,
lib/packetgen/header/udp.rb,
lib/packetgen/header/icmp.rb,
lib/packetgen/header/ipv6.rb,
lib/packetgen/header/icmpv6.rb,
lib/packetgen/header/tcp/option.rb,
lib/packetgen/header/tcp/options.rb,
lib/packetgen/header/header_methods.rb,
lib/packetgen/header/header_class_methods.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 < Struct.new(:field1, :field2)
include PacketGen::StructFu
include PacketGen::Header::HeaderMethods
extend PacketGen::Header::HeaderClassMethods
def initialize(={})
super Int32.new([:field1]), Int32.new([:field2])
end
def read(str)
self[:field1].read str[0, 4]
self[:field2].read str[4, 4]
end
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)
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
Defined Under Namespace
Modules: HeaderClassMethods, HeaderMethods Classes: ARP, CipherError, ESP, Eth, ICMP, ICMPv6, IP, IPv6, TCP, UDP
Class Method Summary collapse
-
.add_class(klass) ⇒ void
Add a foreign header class to known header classes.
-
.all ⇒ Array<Class>
Get known header classes.
-
.get_header_class_by_name(name) ⇒ Class?
Get header class from its name.
-
.remove_class(klass) ⇒ void
Remove a foreign header (previously added by add_header_classà from known header classes..
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.
54 55 56 57 58 |
# File 'lib/packetgen/header.rb', line 54 def self.add_class(klass) protocol_name = klass.to_s.sub(/.*::/, '') @added_header_classes[protocol_name] = klass @header_classes = nil end |
.all ⇒ Array<Class>
Get known header classes
43 44 45 46 |
# File 'lib/packetgen/header.rb', line 43 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
75 76 77 78 79 80 81 |
# File 'lib/packetgen/header.rb', line 75 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.
65 66 67 68 69 |
# File 'lib/packetgen/header.rb', line 65 def self.remove_class(klass) protocol_name = klass.to_s.sub(/.*::/, '') @added_header_classes.delete protocol_name @header_classes = nil end |