updated the tool to use rayon and have output capabilities

This commit is contained in:
2026-05-12 13:15:27 -05:00
parent 217bc7c84a
commit d8affb25d6
3534 changed files with 11346 additions and 98 deletions
Generated
+390 -9
View File
@@ -1,6 +1,6 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
version = 4
[[package]]
name = "addr2line"
@@ -66,6 +66,17 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "async-trait"
version = "0.1.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "atomic-waker"
version = "1.1.2"
@@ -197,6 +208,37 @@ version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
[[package]]
name = "crossbeam-deque"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
dependencies = [
"crossbeam-epoch",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-epoch"
version = "0.9.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "crossbeam-utils"
version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "data-encoding"
version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8"
[[package]]
name = "dns-lookup"
version = "2.0.4"
@@ -205,10 +247,16 @@ checksum = "e5766087c2235fec47fafa4cfecc81e494ee679d0fd4a59887ea0919bfb0e4fc"
dependencies = [
"cfg-if",
"libc",
"socket2",
"socket2 0.5.7",
"windows-sys 0.48.0",
]
[[package]]
name = "either"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
[[package]]
name = "encoding_rs"
version = "0.8.34"
@@ -218,6 +266,18 @@ dependencies = [
"cfg-if",
]
[[package]]
name = "enum-as-inner"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "equivalent"
version = "1.0.1"
@@ -320,6 +380,17 @@ dependencies = [
"slab",
]
[[package]]
name = "getrandom"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
dependencies = [
"cfg-if",
"libc",
"wasi",
]
[[package]]
name = "gimli"
version = "0.29.0"
@@ -452,13 +523,23 @@ dependencies = [
"http-body",
"hyper",
"pin-project-lite",
"socket2",
"socket2 0.5.7",
"tokio",
"tower",
"tower-service",
"tracing",
]
[[package]]
name = "idna"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
dependencies = [
"unicode-bidi",
"unicode-normalization",
]
[[package]]
name = "idna"
version = "0.5.0"
@@ -479,6 +560,19 @@ dependencies = [
"hashbrown",
]
[[package]]
name = "ipconfig"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222"
dependencies = [
"socket2 0.6.3",
"widestring",
"windows-registry",
"windows-result",
"windows-sys 0.61.2",
]
[[package]]
name = "ipnet"
version = "2.9.0"
@@ -508,9 +602,15 @@ dependencies = [
[[package]]
name = "libc"
version = "0.2.155"
version = "0.2.186"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
[[package]]
name = "linked-hash-map"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
[[package]]
name = "linux-raw-sys"
@@ -518,12 +618,30 @@ version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
[[package]]
name = "lock_api"
version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
dependencies = [
"scopeguard",
]
[[package]]
name = "log"
version = "0.4.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
[[package]]
name = "lru-cache"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
dependencies = [
"linked-hash-map",
]
[[package]]
name = "memchr"
version = "2.7.2"
@@ -642,6 +760,29 @@ dependencies = [
"vcpkg",
]
[[package]]
name = "parking_lot"
version = "0.12.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
dependencies = [
"lock_api",
"parking_lot_core",
]
[[package]]
name = "parking_lot_core"
version = "0.9.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
dependencies = [
"cfg-if",
"libc",
"redox_syscall",
"smallvec",
"windows-link",
]
[[package]]
name = "percent-encoding"
version = "2.3.1"
@@ -686,6 +827,15 @@ version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
[[package]]
name = "ppv-lite86"
version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
dependencies = [
"zerocopy",
]
[[package]]
name = "proc-macro2"
version = "1.0.85"
@@ -704,6 +854,65 @@ dependencies = [
"proc-macro2",
]
[[package]]
name = "rand"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a"
dependencies = [
"libc",
"rand_chacha",
"rand_core",
]
[[package]]
name = "rand_chacha"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
"ppv-lite86",
"rand_core",
]
[[package]]
name = "rand_core"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
"getrandom",
]
[[package]]
name = "rayon"
version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d"
dependencies = [
"either",
"rayon-core",
]
[[package]]
name = "rayon-core"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
dependencies = [
"crossbeam-deque",
"crossbeam-utils",
]
[[package]]
name = "redox_syscall"
version = "0.5.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
dependencies = [
"bitflags 2.5.0",
]
[[package]]
name = "reqwest"
version = "0.12.4"
@@ -747,13 +956,21 @@ dependencies = [
"winreg",
]
[[package]]
name = "resolv-conf"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7"
[[package]]
name = "rustbuster"
version = "0.1.0"
dependencies = [
"clap",
"dns-lookup",
"rayon",
"reqwest",
"trust-dns-resolver",
]
[[package]]
@@ -806,6 +1023,12 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "scopeguard"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "security-framework"
version = "2.11.0"
@@ -897,6 +1120,16 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "socket2"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
dependencies = [
"libc",
"windows-sys 0.61.2",
]
[[package]]
name = "strsim"
version = "0.11.1"
@@ -905,9 +1138,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "syn"
version = "2.0.66"
version = "2.0.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5"
checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"
dependencies = [
"proc-macro2",
"quote",
@@ -953,6 +1186,26 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "thiserror"
version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "tinyvec"
version = "1.6.0"
@@ -980,7 +1233,7 @@ dependencies = [
"mio",
"num_cpus",
"pin-project-lite",
"socket2",
"socket2 0.5.7",
"windows-sys 0.48.0",
]
@@ -1041,9 +1294,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
dependencies = [
"pin-project-lite",
"tracing-attributes",
"tracing-core",
]
[[package]]
name = "tracing-attributes"
version = "0.1.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "tracing-core"
version = "0.1.32"
@@ -1053,6 +1318,52 @@ dependencies = [
"once_cell",
]
[[package]]
name = "trust-dns-proto"
version = "0.23.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374"
dependencies = [
"async-trait",
"cfg-if",
"data-encoding",
"enum-as-inner",
"futures-channel",
"futures-io",
"futures-util",
"idna 0.4.0",
"ipnet",
"once_cell",
"rand",
"smallvec",
"thiserror",
"tinyvec",
"tokio",
"tracing",
"url",
]
[[package]]
name = "trust-dns-resolver"
version = "0.23.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6"
dependencies = [
"cfg-if",
"futures-util",
"ipconfig",
"lru-cache",
"once_cell",
"parking_lot",
"rand",
"resolv-conf",
"smallvec",
"thiserror",
"tokio",
"tracing",
"trust-dns-proto",
]
[[package]]
name = "try-lock"
version = "0.2.5"
@@ -1087,7 +1398,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
dependencies = [
"form_urlencoded",
"idna",
"idna 0.5.0",
"percent-encoding",
]
@@ -1194,6 +1505,47 @@ dependencies = [
"wasm-bindgen",
]
[[package]]
name = "widestring"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471"
[[package]]
name = "windows-link"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
[[package]]
name = "windows-registry"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720"
dependencies = [
"windows-link",
"windows-result",
"windows-strings",
]
[[package]]
name = "windows-result"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
dependencies = [
"windows-link",
]
[[package]]
name = "windows-strings"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
dependencies = [
"windows-link",
]
[[package]]
name = "windows-sys"
version = "0.48.0"
@@ -1212,6 +1564,15 @@ dependencies = [
"windows-targets 0.52.5",
]
[[package]]
name = "windows-sys"
version = "0.61.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
dependencies = [
"windows-link",
]
[[package]]
name = "windows-targets"
version = "0.48.5"
@@ -1342,3 +1703,23 @@ dependencies = [
"cfg-if",
"windows-sys 0.48.0",
]
[[package]]
name = "zerocopy"
version = "0.8.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
version = "0.8.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
+2
View File
@@ -8,4 +8,6 @@ edition = "2021"
[dependencies]
clap = { version = "4.5.4", features = ["derive"] }
dns-lookup = "2.0.4"
rayon = "1.12.0"
reqwest = { version = "0.12.4", features = ["blocking"] }
trust-dns-resolver = "0.23.2"
+321 -80
View File
@@ -1,9 +1,23 @@
use std::fs;
use reqwest::{self, StatusCode};
use clap::Parser;
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
use rayon::ThreadPoolBuilder;
use reqwest::{self, StatusCode};
use std::fs::File;
use std::io::BufWriter;
use std::io::Write;
use std::path::PathBuf;
use std::process::exit;
use std::sync::mpsc::{channel, Sender};
use std::thread;
use dns_lookup::lookup_host;
use std::{collections::HashMap, fs};
use trust_dns_resolver::config::*;
use trust_dns_resolver::Resolver;
enum OutputMessage {
UrlResult(String),
SubDomainResult(String),
Shutdown,
}
/// Subdomain Bruteforcer, and directory bruteforcer written in rust, and multi threaded!!!
#[derive(Parser, Debug)]
@@ -11,11 +25,7 @@ use dns_lookup::lookup_host;
struct Args {
/// target to attack, can be a URL or a dns name, you can specify more than one by comma separating the targets
#[arg(short, long)]
target: String,
///Threads to use, there is not upper limit so if you lock up your comptuer that's on you
#[arg(long)]
threads: usize,
target: Option<String>,
/// wordlist to use for subdomains
#[arg(short, long, default_value_t = String::from("none"))]
@@ -24,42 +34,158 @@ struct Args{
///wordlist to use for directories
#[arg(short, long, default_value_t = String::from("none"))]
dirwordlist: String,
///output files to write, will create two files yourinput_urls.txt and yourinput_subs.txt
#[arg(short, long)]
outfile: Option<String>,
///input file full of urls formatted to one url per line.
#[arg(short, long)]
urlfile: Option<PathBuf>,
///input file full of domains formatted to one domain per line.
#[arg(short, long)]
domainfile: Option<PathBuf>,
///number of threads to use by default it will use the rayon global pool default.
#[arg(long)]
threads: Option<usize>,
}
fn try_sub(domain: String){
let ips = lookup_host(&domain);
if ips.is_ok(){
let mut ip_string = String::new();
for ip in ips.unwrap(){
ip_string = format!("{},{}",ip, ip_string);
fn try_sub(
domain: String,
wildcard_reses: HashMap<&String, Vec<String>>,
tx: Sender<OutputMessage>,
output: bool,
) {
let mut opts = ResolverOpts::default();
opts.edns0 = true;
let resolver = Resolver::new(ResolverConfig::default(), opts).unwrap();
let mut ips = Vec::new();
if let Ok(ipv4s) = resolver.ipv4_lookup(&domain) {
ipv4s.iter().for_each(|ip| ips.push(ip.0.to_string()));
}
println!("{} {}", domain, ip_string);
if let Ok(ipv6s) = resolver.ipv6_lookup(&domain) {
ipv6s.iter().for_each(|ip| ips.push(ip.0.to_string()));
}
let mut wild_card = None;
for target in wildcard_reses.keys() {
if domain.contains(&target.to_string()) {
wild_card = wildcard_reses.get(target);
}
}
if !ips.is_empty() {
if let Some(wild_ips) = wild_card {
if ips.len() == wild_ips.len() {
let mut wild_only = true;
for ip in &ips {
if !wild_ips.contains(ip) {
wild_only = false;
}
}
if wild_only {
return;
}
}
}
if output {
if let Err(e) = tx.send(OutputMessage::SubDomainResult(format!(
"{}: {}",
&domain,
ips.join(", ")
))) {
eprintln!("error sending output! {}", e);
}
}
println!("{} {}", domain, ips.join(", "));
}
}
fn try_dir(url: String){
fn try_dir(url: String, tx: Sender<OutputMessage>, output: bool) {
let resp_stat = reqwest::blocking::get(&url);
if resp_stat.is_ok() {
let resp = resp_stat.unwrap().status();
match resp {
StatusCode::OK => println!("{} {}",resp, url),
StatusCode::ACCEPTED => println!("{} {}", resp, url),
StatusCode::CONTINUE => println!("{} {}", resp, url),
StatusCode::CREATED => println!("{} {}", resp, url),
StatusCode::FOUND => println!("{} {}", resp, url),
StatusCode::IM_A_TEAPOT => println!("And what a beautiful teapot you are {}", url),
StatusCode::MOVED_PERMANENTLY => println!("{} {}", resp, url),
StatusCode::PERMANENT_REDIRECT => println!("{} {}", resp, url),
StatusCode::TEMPORARY_REDIRECT => println!("{} {}", resp, url),
_ => ()
StatusCode::OK => {
if output {
if let Err(e) = tx.send(OutputMessage::UrlResult(format!("{} {}", resp, url))) {
eprintln!("error sending output! {}", e);
}
}
println!("{} {}", resp, url);
}
StatusCode::ACCEPTED => {
if output {
if let Err(e) = tx.send(OutputMessage::UrlResult(format!("{} {}", resp, url))) {
eprintln!("error sending output! {}", e);
}
}
println!("{} {}", resp, url);
}
StatusCode::CONTINUE => {
if output {
if let Err(e) = tx.send(OutputMessage::UrlResult(format!("{} {}", resp, url))) {
eprintln!("error sending output! {}", e);
}
}
println!("{} {}", resp, url);
}
StatusCode::CREATED => {
if output {
if let Err(e) = tx.send(OutputMessage::UrlResult(format!("{} {}", resp, url))) {
eprintln!("error sending output! {}", e);
}
}
println!("{} {}", resp, url);
}
StatusCode::FOUND => {
if output {
if let Err(e) = tx.send(OutputMessage::UrlResult(format!("{} {}", resp, url))) {
eprintln!("error sending output! {}", e);
}
}
println!("{} {}", resp, url);
}
StatusCode::IM_A_TEAPOT => {
if output {
if let Err(e) = tx.send(OutputMessage::UrlResult(format!("{} {}", resp, url))) {
eprintln!("error sending output! {}", e);
}
}
println!("And what a beautiful teapot you are {}", url);
}
StatusCode::MOVED_PERMANENTLY => {
if output {
if let Err(e) = tx.send(OutputMessage::UrlResult(format!("{} {}", resp, url))) {
eprintln!("error sending output! {}", e);
}
}
println!("{} {}", resp, url);
}
StatusCode::PERMANENT_REDIRECT => {
if output {
if let Err(e) = tx.send(OutputMessage::UrlResult(format!("{} {}", resp, url))) {
eprintln!("error sending output! {}", e);
}
}
println!("{} {}", resp, url);
}
StatusCode::TEMPORARY_REDIRECT => {
if output {
if let Err(e) = tx.send(OutputMessage::UrlResult(format!("{} {}", resp, url))) {
eprintln!("error sending output! {}", e);
}
}
println!("{} {}", resp, url);
}
_ => (),
}
}
}
fn main() {
print!("
print!(
"
@@ -129,74 +255,189 @@ fn main() {
╙█▄▄▄▀▀▀▓▄▄▄▄▄▄▄▓▀▀
");
"
);
let mut dirs_to_try = Vec::new();
let mut subs_to_try = Vec::new();
let args = Args::parse();
let mut targets = Vec::new();
for target in args.target.split(",").collect::<Vec<&str>>(){
let (tx, rx) = channel();
if let Some(given_targets) = args.target {
for target in given_targets.split(",").collect::<Vec<&str>>() {
targets.push(target.to_owned());
}
}
if let Some(url_file) = args.urlfile {
if let Ok(url_string) = fs::read_to_string(url_file) {
url_string.lines().into_iter().for_each(|url| {
targets.push(url.to_string());
});
}
}
if let Some(domain_file) = args.domainfile {
if let Ok(domain_string) = fs::read_to_string(domain_file) {
domain_string.lines().into_iter().for_each(|domain| {
targets.push(domain.to_string());
});
}
}
if targets.is_empty() {
println!("no targets provided!");
exit(1);
}
if let Some(thread) = args.threads {
ThreadPoolBuilder::new()
.num_threads(thread)
.build_global()
.unwrap();
}
println!(
"INFO:::{} threads will be used:::",
rayon::current_num_threads()
);
println!("detecting if a wild card record exists...");
let mut opts = ResolverOpts::default();
opts.edns0 = true;
let resolver = Resolver::new(ResolverConfig::default(), opts).unwrap();
let mut wild_card_results = HashMap::new();
for target in &targets {
if !target.contains("http") {
subs_to_try.push(target.clone());
let mut ips = Vec::new();
if let Ok(ipv4s) = resolver.ipv4_lookup(&format!("burstpyrofoo.{}", target)) {
ipv4s.iter().for_each(|ip| {
ips.push(ip.0.to_string());
});
println!("INFO:::wildcard found: {} {}:::", target, ips.join(", "));
}
if let Ok(ipv6s) = resolver.ipv6_lookup(&format!("burstpyrofoo.{}", target)) {
println!("wildcard found!");
ipv6s.iter().for_each(|ip| {
ips.push(ip.0.to_string());
});
}
if !ips.is_empty() {
wild_card_results.insert(target, ips);
}
} else {
dirs_to_try.push(target.clone());
}
}
if args.dirwordlist != String::from("none") {
let dirwordlist = fs::read_to_string(args.dirwordlist).expect("error reading directory wordlist");
let dirwordlist =
fs::read_to_string(args.dirwordlist).expect("error reading directory wordlist");
for dir in dirwordlist.split("\n").collect::<Vec<&str>>() {
dirs_to_try.push(dir.trim_end().trim_start().to_owned());
for target in &targets {
if target.contains("http") {
dirs_to_try.push(format!("{}/{}", target, dir.trim()));
}
}
}
}
if args.subwordlist != String::from("none") {
let subwordlist = fs::read_to_string(args.subwordlist).expect("error reading subdomain word list");
let subwordlist =
fs::read_to_string(args.subwordlist).expect("error reading subdomain word list");
for sub in subwordlist.split("\n").collect::<Vec<&str>>() {
subs_to_try.push(sub.trim_end().trim_start().to_owned())
}
}
let mut domains_to_try = Vec::new();
let mut urls_to_try = Vec::new();
println!("loading targets, and wordlists...");
for target in targets{
if target.contains("/"){
for dir in &dirs_to_try{
let url = format!("{}/{}", target, dir);
urls_to_try.push(url.to_owned());
}
}
else if target.contains(".") == true{
for sub in &subs_to_try{
let domain = format!("{}.{}", sub, target);
domains_to_try.push(domain.to_owned());
}
}
else{
println!("{} is not a valid target, please supply either a domain or url", target);
}
}
let mut threads = Vec::new();
let urls_len = urls_to_try.len();
let domains_len = domains_to_try.len();
println!("DONE!, {} URLS to try, and {} subdomains to try", &urls_len, &domains_len);
if urls_len > 0{
let dir_chunk_size = urls_len / &args.threads;
let url_vecs: Vec<Vec<String>> = urls_to_try.chunks(dir_chunk_size).map(|x| x.to_vec()).collect();
for urlvec in url_vecs{
for url in urlvec{
threads.push(thread::spawn(move || {
try_dir(url)
}));
for target in &targets {
if !target.contains("http") {
subs_to_try.push(format!("{}.{}", sub.trim(), target));
}
}
}
if domains_len > 0 {
let domain_chunk_size = domains_len /&args.threads;
let domain_vecs: Vec<Vec<String>> = domains_to_try.chunks(domain_chunk_size).map(|x| x.to_vec()).collect();
for domainvec in domain_vecs{
for domain in domainvec{
threads.push(thread::spawn(move || {
try_sub(domain);
}))
}
println!("INFO:::loading targets, and wordlists...:::");
let urls_len = dirs_to_try.len();
let domains_len = subs_to_try.len();
println!(
"INFO:::DONE!, {} URLS to try, and {} subdomains to try:::",
&urls_len, &domains_len
);
let mut output = false;
let mut urlpath = PathBuf::new();
let mut subpath = PathBuf::new();
if args.outfile.is_some() {
output = true;
let path = args.outfile.clone().unwrap();
urlpath = PathBuf::from(format!("{}_urls.txt", &path));
subpath = PathBuf::from(format!("{}_subs.txt", &path));
println!(
"INFO:::results will be saved to {}_urls.txt and {}_subs.txt:::",
path, path
);
}
let write_handler = thread::spawn(move || {
if output {
let urlfile = File::create(urlpath).unwrap();
let subfile = File::create(subpath).unwrap();
let mut urlwrite = BufWriter::new(urlfile);
let mut subwrite = BufWriter::new(subfile);
const FLUSHEVERY: usize = 10;
let mut url_counter = 0;
let mut sub_counter = 0;
loop {
let msg = rx.recv().unwrap();
match msg {
OutputMessage::UrlResult(res) => {
if let Err(e) = writeln!(urlwrite, "{}", res) {
println!("error writing url file! {}", e);
} else {
url_counter += 1;
}
}
for thread in threads{
let _ = thread.join();
OutputMessage::SubDomainResult(res) => {
if let Err(e) = writeln!(subwrite, "{}", res) {
println!("error writing sub file! {}", e);
} else {
sub_counter += 1;
}
}
println!("done bruteforcing, happy hunting!");
OutputMessage::Shutdown => {
urlwrite.flush().unwrap();
subwrite.flush().unwrap();
break;
}
}
if url_counter == FLUSHEVERY {
if let Err(e) = urlwrite.flush() {
println!("error writing url file! {e}");
}
}
if sub_counter == FLUSHEVERY {
if let Err(e) = subwrite.flush() {
println!("error writing sub file! {e}");
}
}
}
} else {
println!("INFO:::results will be printed to console and not saved...:::");
}
});
rayon::scope(|s| {
if !dirs_to_try.is_empty() {
s.spawn(|_| {
dirs_to_try.par_iter().for_each(|url| {
try_dir(url.to_string(), tx.clone(), output);
});
});
}
if !subs_to_try.is_empty() {
s.spawn(|_| {
subs_to_try.par_iter().for_each(|sub| {
try_sub(
sub.to_string(),
wild_card_results.clone(),
tx.clone(),
output,
);
});
})
}
});
println!("INFO:::enumeration finished!:::");
if output {
println!("INFO:::waiting for output writer to finish...:::");
tx.send(OutputMessage::Shutdown).unwrap();
}
write_handler.join().unwrap();
println!("INFO:::done bruteforcing, happy hunting!":::);
}
+1
View File
@@ -0,0 +1 @@
{"rustc_fingerprint":16956027585667248358,"outputs":{"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.94.1 (e408947bf 2026-03-25)\nbinary: rustc\ncommit-hash: e408947bfd200af42db322daf0fadfe7e26d3bd1\ncommit-date: 2026-03-25\nhost: x86_64-unknown-linux-gnu\nrelease: 1.94.1\nLLVM version: 21.1.8\n","stderr":""},"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/pyro/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""},"11857020428658561806":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/pyro/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""}},"successes":{}}
+3
View File
@@ -0,0 +1,3 @@
Signature: 8a477f597d28d172789f06886806bc55
# This file is a cache directory tag created by cargo.
# For information about cache directory tags see https://bford.info/cachedir/
View File
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
2dde84fbaeced444
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"auto\", \"default\", \"wincon\"]","declared_features":"[\"auto\", \"default\", \"test\", \"wincon\"]","target":9753318193087561239,"profile":10323283122568503036,"path":5060897550942228049,"deps":[[2362169830071005739,"anstyle_query",false,12256565723880552111],[2905435160510042220,"colorchoice",false,4456714328864568249],[11377377817968559775,"anstyle",false,10171982982607624291],[11524778796437627830,"is_terminal_polyfill",false,6356193813223759158],[15059673609494012180,"anstyle_parse",false,15033293755765630331],[17244083487491527972,"utf8parse",false,17300088740466330303]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstream-7249270139fefd7a/dep-lib-anstream","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
9093f880d5cf86b4
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"auto\", \"default\", \"wincon\"]","declared_features":"[\"auto\", \"default\", \"test\", \"wincon\"]","target":9753318193087561239,"profile":13785225790516125199,"path":5060897550942228049,"deps":[[2362169830071005739,"anstyle_query",false,5476468444148258435],[2905435160510042220,"colorchoice",false,8226862032990226513],[11377377817968559775,"anstyle",false,2870375068657451557],[11524778796437627830,"is_terminal_polyfill",false,5099070270784383791],[15059673609494012180,"anstyle_parse",false,13014854229766655780],[17244083487491527972,"utf8parse",false,2025987086353643700]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstream-ca937e03ca3f00b8/dep-lib-anstream","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
250277c3ea9ed527
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"std\"]","target":12848940486553721285,"profile":13785225790516125199,"path":7116384825293994005,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstyle-c2f3d9ce59e33348/dep-lib-anstyle","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
6358a513a1242a8d
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"std\"]","target":12848940486553721285,"profile":10323283122568503036,"path":7116384825293994005,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstyle-cda286b897636a9f/dep-lib-anstyle","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
7b25826405fda0d0
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"default\", \"utf8\"]","declared_features":"[\"core\", \"default\", \"utf8\"]","target":5033495598916551966,"profile":10323283122568503036,"path":16400613309236792306,"deps":[[17244083487491527972,"utf8parse",false,17300088740466330303]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstyle-parse-7774bc769943aac1/dep-lib-anstyle_parse","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
244fbb60f70c9eb4
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"default\", \"utf8\"]","declared_features":"[\"core\", \"default\", \"utf8\"]","target":5033495598916551966,"profile":13785225790516125199,"path":16400613309236792306,"deps":[[17244083487491527972,"utf8parse",false,2025987086353643700]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstyle-parse-fc4724f8893a3ce0/dep-lib-anstyle_parse","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
aff6207a961118aa
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[]","target":13335253778279134839,"profile":10323283122568503036,"path":13588889843138063333,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstyle-query-566efab180f7bc9d/dep-lib-anstyle_query","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
83d617cd0853004c
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[]","target":13335253778279134839,"profile":13785225790516125199,"path":13588889843138063333,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstyle-query-9430afec7da5e505/dep-lib-anstyle_query","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
88cd679ceba8692c
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[]","target":5116616278641129243,"profile":2225463790103693989,"path":18104243295821950904,"deps":[[3546373100931343613,"syn",false,3861453105350196831],[13236762933977798352,"proc_macro2",false,8537918591826186395],[16437840124237027127,"quote",false,5412739456136711908]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-trait-4e74662e4e43304e/dep-lib-async_trait","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
5491547d54939c27
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[\"portable-atomic\"]","target":14411119108718288063,"profile":15657897354478470176,"path":15527342706982090352,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/atomic-waker-843b52043047247e/dep-lib-atomic_waker","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
bc65783aa9db93fa
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[\"portable-atomic\"]","target":14411119108718288063,"profile":2241668132362809309,"path":15527342706982090352,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/atomic-waker-d6c2ddae633ac1aa/dep-lib-atomic_waker","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
b5d7b0c0c9a040d1
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[]","target":2631145339540467737,"profile":2225463790103693989,"path":7045749759694450536,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/autocfg-1aea6988d788c165/dep-lib-autocfg","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
e2a371ca18388bde
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"alloc\", \"default\", \"std\"]","declared_features":"[\"alloc\", \"default\", \"std\"]","target":13060062996227388079,"profile":2241668132362809309,"path":5551949133805718033,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/base64-05c11f181c9cd5a6/dep-lib-base64","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
1a907be1c8188997
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"alloc\", \"default\", \"std\"]","declared_features":"[\"alloc\", \"default\", \"std\"]","target":13060062996227388079,"profile":15657897354478470176,"path":5551949133805718033,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/base64-e5cc050039038c59/dep-lib-base64","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
58685831da33f430
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[\"arbitrary\", \"bytemuck\", \"compiler_builtins\", \"core\", \"example_generated\", \"rustc-dep-of-std\", \"serde\", \"std\"]","target":12657915593679244726,"profile":15657897354478470176,"path":5510510112491842035,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bitflags-1f130d746b686320/dep-lib-bitflags","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
3b542e1e0312e64a
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[\"arbitrary\", \"bytemuck\", \"compiler_builtins\", \"core\", \"example_generated\", \"rustc-dep-of-std\", \"serde\", \"std\"]","target":12657915593679244726,"profile":2241668132362809309,"path":5510510112491842035,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bitflags-ddd6fb338367e2a1/dep-lib-bitflags","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
9f398d96149cf161
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"serde\", \"std\"]","target":9641554635012368048,"profile":15657897354478470176,"path":1433402356311659891,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bytes-282dd19c4b3c17d1/dep-lib-bytes","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
9270c33b75ba94f2
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"serde\", \"std\"]","target":9641554635012368048,"profile":2241668132362809309,"path":1433402356311659891,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bytes-f5dedda3637484ff/dep-lib-bytes","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
9d71b3b13956e6ad
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[\"jobserver\", \"libc\", \"once_cell\", \"parallel\"]","target":14191615625821551695,"profile":2225463790103693989,"path":5182650557410257406,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cc-8fb13211634ba0eb/dep-lib-cc","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
94982330f489c2ff
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[\"compiler_builtins\", \"core\", \"rustc-dep-of-std\"]","target":14691992093392644261,"profile":2241668132362809309,"path":16069518019749620653,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cfg-if-4c131d49fee0abb9/dep-lib-cfg_if","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
815d4009793c4f24
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[\"compiler_builtins\", \"core\", \"rustc-dep-of-std\"]","target":14691992093392644261,"profile":15657897354478470176,"path":16069518019749620653,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cfg-if-9e8ca6ed031de0b9/dep-lib-cfg_if","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
96bc22c4a2b9e091
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"color\", \"default\", \"derive\", \"error-context\", \"help\", \"std\", \"suggestions\", \"usage\"]","declared_features":"[\"cargo\", \"color\", \"debug\", \"default\", \"deprecated\", \"derive\", \"env\", \"error-context\", \"help\", \"std\", \"string\", \"suggestions\", \"unicode\", \"unstable-doc\", \"unstable-styles\", \"unstable-v5\", \"usage\", \"wrap_help\"]","target":725892165292113192,"profile":15657897354478470176,"path":6603582439274354907,"deps":[[3811900418443909595,"clap_builder",false,6005179314902238385],[7701503647698962294,"clap_derive",false,10274433118510361951]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/clap-1bd10a80a857723a/dep-lib-clap","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
02b2da9655631202
@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"color\", \"default\", \"derive\", \"error-context\", \"help\", \"std\", \"suggestions\", \"usage\"]","declared_features":"[\"cargo\", \"color\", \"debug\", \"default\", \"deprecated\", \"derive\", \"env\", \"error-context\", \"help\", \"std\", \"string\", \"suggestions\", \"unicode\", \"unstable-doc\", \"unstable-styles\", \"unstable-v5\", \"usage\", \"wrap_help\"]","target":725892165292113192,"profile":15657897354478470176,"path":6603582439274354907,"deps":[[3811900418443909595,"clap_builder",false,6005179314902238385],[7701503647698962294,"clap_derive",false,3138201158350000891]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/clap-38671d1ac12ff85a/dep-lib-clap","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.

Some files were not shown because too many files have changed in this diff Show More