Capfile
A pure Rust crate for reading and writing pcap/pcapng capture files with zero-copy parsing and built-in packet dissection.
Features
- Zero-copy parsing: Efficiently parse large capture files without unnecessary memory allocation
- Both formats: Full support for legacy PCAP and modern PCAPNG formats
- Packet dissection: Built-in dissection for Ethernet, IPv4, IPv6, TCP, UDP, ICMP, and DNS
- Write support: Create new PCAP and PCAPNG capture files
- Memory-mapped I/O: Fast reading using memory mapping
Quick Start
Reading a PCAP file
use PcapReader;
let mut reader = open?;
while let Some = reader.next_packet?
Reading from bytes (no_std/WASM)
use PcapReader;
use Cursor;
let data = include_bytes!;
let mut reader = from_reader?;
while let Some = reader.next_packet?
Reading a PCAPNG file
use PcapngReader;
use Block;
let mut reader = open?;
// Get interface information
for in reader.interfaces.iter.enumerate
// Iterate over blocks
while let Some = reader.next_block?
Packet Dissection
use ;
let mut reader = open?;
if let Some = reader.next_packet?
Writing a PCAP file
use PcapWriter;
let mut writer = create?; // Ethernet (link_type = 1)
// Write a packet (data, timestamp in ns, captured length)
writer.write_packet?;
Writing a PCAPNG file
use PcapngWriter;
let mut writer = create?;
// Add an interface (returns interface ID)
let iface_id = writer.write_interface?; // Ethernet, snap_len = 65535
// Write a packet
writer.write_packet?;
Feature Flags
std(default): Enables file system access. Without this feature, you can only parse from in-memory byte slices.
Requirements
- Rust 1.70 or later
License
MIT License - see LICENSE for details.