use pentest::{Pentest, Protocol};
use std::env;
use std::process;
use std::str::FromStr;
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() < 7 {
eprintln!("Usage: pentest IP_ADDRESS PORT COUNTER PROTOCOL PAYLOAD CONCURRENCY");
process::exit(1);
}
let ip = &args[1];
let port = match u16::from_str(&args[2]) {
Ok(port) => port,
Err(_) => {
eprintln!("Error: Invalid port number");
process::exit(1);
}
};
let counter = match usize::from_str(&args[3]) {
Ok(counter) => counter,
Err(_) => {
eprintln!("Error: Invalid counter value");
process::exit(1);
}
};
let protocol = match args[4].to_lowercase().as_str() {
"tcp" => Protocol::TCP,
"udp" => Protocol::UDP,
_ => {
eprintln!("Error: Invalid protocol. Supported protocols are TCP and UDP.");
process::exit(1);
}
};
let payload = args[5].clone().into_bytes();
let concurrency = match usize::from_str(&args[6]) {
Ok(concurrency) => concurrency,
Err(_) => {
eprintln!("Error: Invalid concurrency value");
process::exit(1);
}
};
println!(
"Starting test with parameters:\nIP Address: {}\nPort: {}\nCounter: {}\nProtocol: {:?}\nPayload: {:?}\nConcurrency: {}",
ip, port, counter, protocol, String::from_utf8_lossy(&payload), concurrency
);
let pentest = Pentest::new(ip, port, counter, protocol, payload, concurrency);
if let Err(err) = pentest.run() {
eprintln!("Error: {}", err);
process::exit(1);
}
}