use std::net::Ipv4Addr;
use std::process::Command;
use wiretap::{self, Packet, TcpSegmentCollection};
fn main() {
let pc = wiretap::PacketCapture::new_with_default().unwrap();
println!("{pc:?}");
let pc = pc.start_capture();
println!("{pc:?}");
run_nmap();
let pc = pc.stop_capture();
println!("{pc:?}");
let output = pc.results_as_ipv4();
println!("Captured {} IPV4 packets", output.len());
let to_from_target = output.filter_only_host(Ipv4Addr::new(192, 168, 5, 6));
println!("IPv4 packets from target: {}", to_from_target.len());
let tcp_now = TcpSegmentCollection::from(to_from_target);
println!("TCP segments from target: {}", tcp_now.len());
let mut non_empty = tcp_now.filter_no_payload();
println!("Not empty TCP segments: {}", non_empty.len());
let (m, u) = non_empty.find_challenge_response_pairs();
println!("Matched (pairs): {} Unmatched: {}", m.len(), u.len());
for pair in m.iter() {
println!("{}", pair.response.get_source());
println!("\t{:?}", pair.challenge.payload());
println!("\t{:?}", pair.response.payload());
}
for other in u.iter() {
println!("{} --> {:?}", other.get_destination(), other.payload());
}
}
fn run_nmap() {
Command::new("nmap")
.args([
"-sV",
"-p22",
"192.168.5.6",
"-w",
"/home/dev/deception_rust/tcpdumped.pcap",
])
.output()
.unwrap();
}