extern crate libnfqueue as nfq;
use nfq::{Handle, ProtocolFamily, CopyMode, VerdictHandler, Message, Verdict};
fn main() {
let mut handle = Handle::new().ok().unwrap();
let mut queue = handle.queue(0, Decider{count: 0}).unwrap();
handle.bind(ProtocolFamily::INET).ok();
queue.mode(CopyMode::Packet(4096)).ok();
println!("Listening for packets...");
handle.start(4096);
println!("Finished...");
}
struct Decider {
count: i32
}
impl VerdictHandler for Decider {
fn decide(&mut self, message: &mut Message) -> Verdict {
let id = message.header.id();
self.count += 1;
if self.count % 2 == 0 {
println!("Accepting packet {}", id);
Verdict::Accept
} else {
println!("Dropping packet {}", id);
Verdict::Drop
}
}
}