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
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