Packet Module

The totally new Packet module provides sophisticated API for working with packet contents. In jNetPcap v1, everything was in the main module. In version 2 we split the functionality into a Packet module and much much more.

The Packet module is a standalone module from Pcap. Pcap applications can include the Packet module and utilize full packet API as can other unrelated projects.

More on this later with examples.

Packet module capabilities

  • Protocol Stack (OSI Layers 2-7)

    • Multiple protocol packs (extensions)

    • Dissectors, reassemblers, crypto ciphers

  • Meta representation and formatters

  • Flexible data sources such as ByteBuffer, byte[] and native memory

  • BinaryLayout for describing binary structure

  • BitFields for accessing binary structures

BinaryLayouts

Since packets are binary structures, a robust BinaryLayout API has been developed, based on Java's Panama project Memory API (JEP 424), but with a lot more bit-level granularity.

Example 1: IP version 4 header using BinaryLayout definition:

IP ver 4 definition taken from Ip4.java class, defined using BinaryLayout with bit-level granularity

Ip4.java: imports


Ip4.java: extended layout

The extended Ip4 layout adds addition bit level granularity to dsfield and other ways to access the header including via byte[], full 32-bit words, etc..

Example 2: IP version 6 header using BinaryLayout definition:

IP ver 6 header definition taken from Ip6.java class defined using BinaryLayout with bit-level granularity

Ip6.java: imports

Ip6: extended layout

Note: For those not familiar with the C structure concept. A structure is composed of elements which are layed out one after the previous one. The size of the structure is combined size of each element within. A union overlays each element on top of the previous one. The size of a union is the size of the biggest element within the union. Each structure and union can have structures and unions as child elements.