PacketGen Structure
PacketGen uses 3 primary concepts:
a packet is an object describing a network packet,
a header is an object describing a network protocol,
a field is of a basic or composed type. A composed type is a type based on one or
more others composed types or basic types.
Packets
PacketGen is packet centric, so sessions or fragmentation are not handled. Thus, a packet may not contain all data necessary to interpret it.
A packet (PacketGen::Packet
class) is merely a container for headers. It also has a body to handle data of most inner protocol.
A packet consists of:
an array containing headers (
PacketGen::Packet#headers
),a body (
PacketGen::Packet#body
, which is a shortcut to last header's body).
Packet class also provides methods to interact with packets:
parsing packets from binary string,
reading packets from PCAP and PCAP-NG files,
capturing packets from a network interface,
writing packets to PCAP-NG files,
helpers methods to:
calculate all length and checksum fields among headers,
serialize packet to binary data,
encapsulate a packet in another,
decapsulate some headers from a packet to a new packet.
Headers
Most of headers are based on PacketGen types. They contain fields. Each field is defined from a type.
Some headers may contain others headers. Such headers should have a #body
field to handle inner headers.
Some protocols use length fields and/or checksum fields. To permit computation of these fields at once through PacketGen::Packet#calc
, these fields should be named #length
and #checksum
, respectively.
Most of PacketGen header classes inherit from PacketGen::Header::Base
class. This class implements minimal API needed to parse packets and add headers to packets.
Types
Basic types
Basic types are types used to construct headers or composed types. Basic types are listed in table below.
Type
Description
Types::Int8
8-bit integer
Types::Int8Enum
8-bit enumerated integer
Types::Int16
, Types::Int16be
16-bit big-endian integer
Types::Int16Enum
, Types::Int16beEnum
16-bit big-endian enumerated integer
Types::Int16le
16-bit little-endian integer
Types::Int16leEnum
16-bit little-endian enumerated integer
Types::Int32
, Types::Int32be
32-bit big-endian integer
Types::Int32Enum
, Types::Int32beEnum
32-bit big-endian enumerated integer
Types::Int32le
32-bit little-endian integer
Types::Int32leEnum
32-bit little-endian enumerated integer
Types::Int64
, Types::Int64be
64-bit big-endian integer
Types::Int64le
64-bit little-endian integer
Types::String
binary string
Types::CString
null-terminated string
Types::IntString
binary string prepended with its field
Types::Array
container for types. May contain multiple values of a single type
Composed Types
Composed types are some PacketGen default types built from basic ones. These types are commonly used to define headers:
Type
Description
Types::Fields
a container to concatenate multiple fields of different types together
Types::TLV
Type-Length-Value type
Types::OUI
Organizationally Unique Identifier
Some headers also define commonly used types:
Type
Description
Header::Eth::MacAddr
Ethernet MAC address
Header::IP::Addr
IPv4 address
Header::IPv6::Addr
IPv6 address
Last updated