Skip to content

Latest commit

 

History

301 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jNetPcap Bindings

Java Panama FFM Maven Central License

Low-level libpcap bindings for Java using Panama Foreign Function & Memory API.

jNetPcap Bindings provides direct access to libpcap from Java via the Panama FFM API. This is the version 3 release of the popular jNetPcap library, originally hosted on SourceForge.net.

Note: Version 3 uses Panama FFM (not JNI). Requires JDK 22+.


Table of Contents

  1. Overview
  2. Architecture
  3. Quick Start
  4. Examples
  5. Dependencies
  6. Installation
  7. Documentation
  8. Contact
  9. Migration from v1/v2

Overview

Direct libpcap access from Java using Panama Foreign Function & Memory API for zero-overhead native calls.

Key Features:

  • Zero-Overhead Native Calls - Panama FFM provides near-native performance
  • Type-Safe Bindings - Java-friendly API wrapping libpcap functions
  • Memory Safety - Automatic resource management via Arena scopes
  • Cross-Platform - Linux, Windows (Npcap/WinPcap), macOS

Architecture

┌─────────────────────────┐
│    Java Application     │
└───────────┬─────────────┘
            │
┌───────────▼─────────────┐
│   jnetpcap-bindings     │  ◄── This module
│   (Panama FFM API)      │
└───────────┬─────────────┘
            │
┌───────────▼─────────────┐
│  libpcap / Npcap        │
└───────────┬─────────────┘
            │
┌───────────▼─────────────┐
│   Operating System      │
└───────────┬─────────────┘
            │
┌───────────▼─────────────┐
│  Network Interface      │
└─────────────────────────┘

For higher-level packet capture and protocol analysis, see jnetpcap-api and jnetpcap-sdk.


Quick Start

Using SDK BOM (Recommended)

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.slytechs.sdk</groupId>
            <artifactId>sdk-bom</artifactId>
            <version>3.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.slytechs.sdk</groupId>
        <artifactId>jnetpcap-bindings</artifactId>
    </dependency>
</dependencies>

Module Declaration

module your.module {
    requires com.slytechs.jnet.jnetpcap;
}

Examples

Capture a Live Packet

void main() throws PcapException {
    List<PcapIf> devices = Pcap.findAllDevs();
    
    try (Pcap pcap = Pcap.create(devices.getFirst())) {
        pcap.activate();
        
        pcap.loop(1, (String msg, PcapHeader header, byte[] packet) -> {
            System.out.printf("Captured %d bytes%n", header.captureLength());
        }, "Capture Example");
    }
}

Transmit a Packet

void main() throws PcapException {
    byte[] packetBytes = HexStrings.parseHexString("0026622f4787...");
    List<PcapIf> devices = Pcap.findAllDevs();
    
    try (Pcap pcap = Pcap.create(devices.getFirst())) {
        pcap.activate();
        pcap.sendPacket(packetBytes);
    }
}

Statistics Snapshots

void main() throws PcapException, InterruptedException {
    List<PcapIf> devices = Pcap.findAllDevs();
    
    try (Pcap pcap = Pcap.create(devices.getFirst())) {
        pcap.activate();
        
        for (int i = 0; i < 5; i++) {
            System.out.println(pcap.stats());
            Thread.sleep(1000);
        }
    }
}

JVM Arguments

java --enable-native-access=com.slytechs.jnet.jnetpcap \
     -Djava.library.path=/usr/lib \
     -jar your-app.jar

Dependencies

Java Requirements

  • JDK 22+ - Required for Panama FFM API

Native Library Requirements

One of:


Installation

Maven (with BOM)

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.slytechs.sdk</groupId>
            <artifactId>sdk-bom</artifactId>
            <version>3.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.slytechs.sdk</groupId>
        <artifactId>jnetpcap-bindings</artifactId>
    </dependency>
</dependencies>

Maven (standalone)

<dependency>
    <groupId>com.slytechs.sdk</groupId>
    <artifactId>jnetpcap-bindings</artifactId>
    <version>3.0.0</version>
</dependency>

Gradle

dependencies {
    implementation platform('com.slytechs.sdk:sdk-bom:3.0.0')
    implementation 'com.slytechs.sdk:jnetpcap-bindings'
}

Documentation


Contact


Migration from v1/v2

Key Changes in v3

Aspect v1/v2 v3
Native integration JNI Panama FFM
Java version 8-11 22+
Maven groupId com.slytechs.jnet.jnetpcap com.slytechs.sdk
Maven artifactId jnetpcap-wrapper jnetpcap-bindings
Module name com.slytechs.sdk.jnetpcap com.slytechs.jnet.jnetpcap

Protocol Support

Protocol dissection (Ethernet, IP, TCP, etc.) is available via separate modules:

For detailed migration instructions, see the Wiki.


Related Projects


Sly Technologies Inc. - High-performance network analysis solutions

Website: www.slytechs.com


About

Low-level libpcap FFM bindings

Topics

Resources

Stars

89 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages