Added timeout on http
All checks were successful
Rust-build / build (push) Successful in 16m6s

This commit is contained in:
Justine Pelletreau 2023-07-22 22:04:50 +02:00
parent 95d726987f
commit befd6c862b
5 changed files with 11 additions and 8 deletions

2
Cargo.lock generated
View File

@ -678,7 +678,7 @@ dependencies = [
[[package]]
name = "portnut"
version = "0.1.1"
version = "0.1.2"
dependencies = [
"atty",
"clap",

View File

@ -1,6 +1,6 @@
[package]
name = "portnut"
version = "0.1.1"
version = "0.1.2"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

View File

@ -5,7 +5,6 @@ Portnut is a port stressing / scanning multithreaded utility. It can handle raw
# TODO
* Make a distributed version that allows stressing from multiple computers at the same time
* Return more stats (low 1%, high 1%)
* Http : Read more about "blocking" reqwest, add a timeout
# Install
Go to the releases page and download the latest version.

View File

@ -5,7 +5,7 @@ use std::sync::mpsc;
use crate::results::*;
pub fn http_stress(url: String, interval: Duration, sleep: Duration, threads: u32) -> std::io::Result<()> {
pub fn http_stress(url: String, interval: Duration, sleep: Duration, threads: u32, timeout: Duration) -> std::io::Result<()> {
let mut handles = vec![];
let (tx, rx) = mpsc::channel();
@ -17,6 +17,7 @@ pub fn http_stress(url: String, interval: Duration, sleep: Duration, threads: u3
let end_time = Instant::now() + interval;
let wait = sleep.clone();
let tx2 = tx.clone();
let delay = timeout.clone();
@ -25,7 +26,8 @@ pub fn http_stress(url: String, interval: Duration, sleep: Duration, threads: u3
if Instant::now() >= end_time { break; }
let b4 = Instant::now();
let resp = reqwest::blocking::get(add.clone());
let client = reqwest::blocking::Client::new();
let resp = client.get(add.clone()).timeout(delay).send();
let time = Instant::now() - b4;
match resp {
Ok(_) => {

View File

@ -48,7 +48,7 @@ fn main() -> std::io::Result<()> {
}
"httpstress" => {
println!("===== HTTP STRESS TEST =====");
http_stress(address, duration, sleep, threads)?;
http_stress(address, duration, sleep, threads, timeout)?;
return Ok(());
}
_ => {
@ -98,10 +98,12 @@ struct Args {
///Mode of use : either tcpstress, tcpscan or httpstress
mode: String,
///IP address or hostname to scan - or url if using http
///ex of address : 127.0.0.1
///ex of url : http://example.org
#[arg(short, long)]
address: String,
///Timeout for each connection in seconds
#[arg(short, long, default_value_t = 1)]
///Timeout for each connection in seconds, default 30
#[arg(short, long, default_value_t = 30)]
timeout: u64,
///Number of milliseconds to wait in between scans or requests
#[arg(short, long, default_value_t = 30)]