added the ability to parse cidr notation for target inputs.

This commit is contained in:
pyro committed 2026-09-17 12:26:42 -05:00
1 parent 0ef453427b
commit eae2e5a43b
3 files changed
+19 -1

No files matched your search

Generated
+7
View File
@@ -175,6 +175,12 @@ version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "ipnet"
version = "2.12.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0"
[[package]] [[package]]
name = "is_terminal_polyfill" name = "is_terminal_polyfill"
version = "1.70.2" version = "1.70.2"
@@ -241,6 +247,7 @@ dependencies = [
"clap", "clap",
"colored", "colored",
"crossbeam", "crossbeam",
"ipnet",
"rayon", "rayon",
"walkdir", "walkdir",
] ]
+1
View File
@@ -7,6 +7,7 @@ edition = "2024"
clap = { version = "4.5.41", features = ["derive"] } clap = { version = "4.5.41", features = ["derive"] }
colored = "3.0.0" colored = "3.0.0"
crossbeam = "0.8.4" crossbeam = "0.8.4"
ipnet = "2.12.2"
rayon = "1.12.0" rayon = "1.12.0"
walkdir = "2.5.0" walkdir = "2.5.0"
+11 -1
View File
@@ -1,12 +1,14 @@
use clap::Parser; use clap::Parser;
use colored::Colorize; use colored::Colorize;
use crossbeam::queue::SegQueue; use crossbeam::queue::SegQueue;
use ipnet::IpNet;
use std::fmt::Debug; use std::fmt::Debug;
use std::fs; use std::fs;
use std::fs::File; use std::fs::File;
use std::fs::read_to_string; use std::fs::read_to_string;
use std::io::Write; use std::io::Write;
use std::io::stdin; use std::io::stdin;
use std::net::IpAddr;
use std::path::PathBuf; use std::path::PathBuf;
use std::process::Command; use std::process::Command;
use std::process::exit; use std::process::exit;
@@ -370,7 +372,15 @@ fn main() {
if targets.contains(",") { if targets.contains(",") {
let split_targets: Vec<&str> = targets.split(",").collect(); let split_targets: Vec<&str> = targets.split(",").collect();
for target in split_targets { for target in split_targets {
computers.push(target.trim().to_lowercase()); if let Ok(_) = target.trim().parse::<IpAddr>() {
computers.push(target.trim().to_string());
} else if let Ok(net) = target.trim().parse::<ipnet::IpNet>() {
net.hosts().into_iter().for_each(|h| {
computers.push(h.to_string());
});
} else {
computers.push(target.trim().to_lowercase());
}
} }
} else { } else {
computers.push(targets); computers.push(targets);