diff --git a/Cargo.lock b/Cargo.lock index b290189..722cbc6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -187,18 +187,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.7" +version = "4.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" +checksum = "2275f18819641850fa26c89acc84d465c1bf91ce57bc2748b28c420473352f64" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.4.7" +version = "4.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" +checksum = "07cdf1b148b25c1e1f7a42225e30a0d99a615cd4637eae7365548dd4529b95bc" dependencies = [ "anstream", "anstyle", @@ -278,6 +278,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "err-derive" version = "0.3.1" @@ -375,31 +381,29 @@ checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" [[package]] name = "git-version" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6b0decc02f4636b9ccad390dcbe77b722a77efedfa393caf8379a51d5c61899" +checksum = "13ad01ffa8221f7fe8b936d6ffb2a3e7ad428885a04fad51866a5f33eafda57c" dependencies = [ "git-version-macro", - "proc-macro-hack", ] [[package]] name = "git-version-macro" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe69f1cbdb6e28af2bac214e943b99ce8a0a06b447d15d3e61161b0423139f3f" +checksum = "84488ccbdb24ad6f56dc1863b4a8154a7856cd3c6c7610401634fab3cb588dae" dependencies = [ - "proc-macro-hack", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.39", ] [[package]] name = "h2" -version = "0.3.21" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" dependencies = [ "bytes", "fnv", @@ -416,9 +420,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" [[package]] name = "hermit-abi" @@ -428,9 +432,9 @@ checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "http" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f95b9abcae896730d42b78e09c155ed4ddf82c07b4de772c64aee5b2d8b7c150" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", @@ -533,17 +537,17 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.3" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ - "autocfg", + "equivalent", "hashbrown", ] [[package]] name = "ipblc" -version = "1.6.0" +version = "1.6.3" dependencies = [ "chrono", "clap", @@ -814,12 +818,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - [[package]] name = "proc-macro2" version = "1.0.69" @@ -968,9 +966,9 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustls" -version = "0.21.8" +version = "0.21.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c" +checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9" dependencies = [ "log", "ring", diff --git a/Cargo.toml b/Cargo.toml index e426c27..36053b6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ipblc" -version = "1.6.0" +version = "1.6.3" edition = "2021" authors = ["PaulBSD "] description = "ipblc is a tool that search and send attacking ip addresses to ipbl" diff --git a/src/monitoring.rs b/src/monitoring.rs index c77d3e0..4204793 100644 --- a/src/monitoring.rs +++ b/src/monitoring.rs @@ -4,41 +4,36 @@ use serde_json; use std::io; use std::sync::Arc; use tokio::io::AsyncWriteExt; -use tokio::net::TcpSocket; +use tokio::net::TcpListener; use tokio::sync::RwLock; pub async fn apiserver(ctxarc: &Arc>) -> io::Result<()> { let ctxarc = ctxarc.clone(); - let addr = { ctxarc.read().await.cfg.api.parse().unwrap() }; - - let socket = TcpSocket::new_v4().unwrap(); - match socket.bind(addr) { - Ok(_) => {} - Err(_) => { - println!("can't bind monitoring socket, exiting..."); - std::process::exit(1); - } - } - socket.set_reuseaddr(true).unwrap(); - socket - .set_linger(Some(std::time::Duration::from_secs(0))) - .unwrap(); - let listener = socket.listen(128).unwrap(); + let addr: String = { ctxarc.read().await.cfg.api.parse().unwrap() }; + let listener = TcpListener::bind(addr).await.unwrap(); tokio::spawn(async move { loop { match listener.accept().await { - Ok((stream, _addr)) => { - stream.readable().await.unwrap(); - let (reader, mut writer) = stream.into_split(); - let mut buf: [u8; 16] = [0; 16]; + Ok((mut socket, _addr)) => { + let mut buf = vec![0; 1024]; - match reader.try_read(&mut buf) { - Ok(_) => {} - Err(e) => { - println!("error: {}", e); + match socket.readable().await { + Ok(_) => { + match socket.try_read(&mut buf) { + Ok(_) => {} + Err(e) => { + println!("{e}"); + continue; + } + }; } - }; + Err(e) => { + println!("{e}"); + continue; + } + } + let msg = match String::from_utf8(buf.to_vec()) { Ok(o) => o.trim_matches(char::from(0)).trim().to_string(), Err(_) => "".to_string(), @@ -46,7 +41,7 @@ pub async fn apiserver(ctxarc: &Arc>) -> io::Result<()> { let res = format_result(&ctxarc, msg.as_str()).await; - match writer.write_all(format!("{res}").as_bytes()).await { + match socket.write_all(res.as_bytes()).await { Ok(_) => {} Err(err) => { println!("ee {err}"); @@ -54,7 +49,7 @@ pub async fn apiserver(ctxarc: &Arc>) -> io::Result<()> { } } Err(err) => { - println!("unable to serialize data: {err}"); + println!("error: {err}"); } } }