#[cfg(feature = "pcap")]
fn main() -> Result<(), Box<dyn std::error::Error>> {
use netring::Capture;
use netring::pcap::CaptureWriter;
use std::fs::File;
let iface = std::env::args().nth(1).unwrap_or_else(|| "lo".into());
let count: usize = std::env::args()
.nth(2)
.and_then(|s| s.parse().ok())
.unwrap_or(100);
let out = std::env::args().nth(3).unwrap_or_else(|| "out.pcap".into());
eprintln!("Capturing {count} packets from {iface} into {out}");
let mut cap = Capture::open(&iface)?;
let mut writer = CaptureWriter::create(File::create(&out)?)?;
let mut pkts = cap.packets();
let mut seen = 0;
while seen < count {
let Some(pkt) = pkts.next_packet() else { break };
writer.write_packet(&pkt)?;
seen += 1;
}
eprintln!("Done. Inspect with `tcpdump -r {out}` or `wireshark {out}`.");
Ok(())
}
#[cfg(not(feature = "pcap"))]
fn main() {
eprintln!(
"This example requires the 'pcap' feature: cargo run --example pcap_write --features pcap"
);
}