use crate::packet::packet::Packet; use pcap::Capture; pub struct PacketCapture { capture: Capture, } impl PacketCapture { pub fn new(device: &str) -> Self { println!("Packet Capture Open Device {:?}", device); let capture = Capture::from_device(device) .unwrap() .immediate_mode(true) .open() .unwrap(); PacketCapture { capture } } pub fn next(&mut self) -> Option { match self.capture.next_packet() { Ok(packet) => Some(Packet::new(packet.data, packet.header.len)), Err(_) => None, } } pub fn list() { for device in pcap::Device::list().expect("device list failed") { println!("{:?}", device); } } }