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
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?;
Requirements
- Rust 1.85 or later
License
Apache License 2.0 - see LICENSE for details.