packet_parser 1.2.0

A powerful and modular Rust crate for network packet parsing.
Documentation
use packet_parser::PacketFlow;
use pcap::Capture;
use std::path::Path;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let pcap_file_path =
        Path::new("/home/erdt-cyber/rust/ICS-Security-Tools/pcaps/ModbusTCP/mb2.pcap");

    let mut cap = Capture::from_file(pcap_file_path)?;
    let mut id = 0;
    loop {
        let packet = match cap.next_packet() {
            Ok(p) => p,
            Err(pcap::Error::NoMorePackets) => break,
            Err(e) => {
                eprintln!("pcap read error: {e}");
                continue;
            }
        };

        let parsed = PacketFlow::try_from(packet.data);

        match parsed {
            Ok(flow) => {
                id += 1;
                let _owned = flow.to_owned();
            }
            Err(e) => {
                id += 1;
                eprintln!("parse error: {e} for packet {id}");
            }
        }
    }

    Ok(())
}