pentest 0.1.0

A zero dependency network penetration test tool.
Documentation
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);
    }
}