use std::fmt;
use super::ProgressCallback;
use crate::{PacketTransport, QueryType};
#[derive(Clone)]
pub struct SubdomainBruteConfig {
pub domains: Vec<String>,
pub resolvers: Vec<String>,
pub dictionary_file: Option<String>,
pub dictionary: Option<Vec<String>>,
pub skip_wildcard: bool,
pub bandwidth_limit: Option<String>,
pub verify_mode: bool,
pub max_retries: u8,
pub dns_timeout_seconds: u64,
pub max_wait_seconds: u64,
pub verify_timeout_seconds: u64,
pub verify_concurrency: usize,
pub resolve_records: bool,
pub cdn_detect: bool,
pub cdn_collapse: bool,
pub query_types: Vec<QueryType>,
pub silent: bool,
pub raw_records: bool,
pub device: Option<String>,
pub transport: PacketTransport,
pub progress_callback: Option<ProgressCallback>,
}
impl fmt::Debug for SubdomainBruteConfig {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("SubdomainBruteConfig")
.field("domains", &self.domains)
.field("resolvers", &self.resolvers)
.field("dictionary_file", &self.dictionary_file)
.field("dictionary", &self.dictionary)
.field("skip_wildcard", &self.skip_wildcard)
.field("bandwidth_limit", &self.bandwidth_limit)
.field("verify_mode", &self.verify_mode)
.field("max_retries", &self.max_retries)
.field("dns_timeout_seconds", &self.dns_timeout_seconds)
.field("max_wait_seconds", &self.max_wait_seconds)
.field("verify_timeout_seconds", &self.verify_timeout_seconds)
.field("verify_concurrency", &self.verify_concurrency)
.field("resolve_records", &self.resolve_records)
.field("cdn_detect", &self.cdn_detect)
.field("cdn_collapse", &self.cdn_collapse)
.field("query_types", &self.query_types)
.field("silent", &self.silent)
.field("raw_records", &self.raw_records)
.field("device", &self.device)
.field("transport", &self.transport)
.field(
"progress_callback",
&self.progress_callback.as_ref().map(|_| "<callback>"),
)
.finish()
}
}
impl Default for SubdomainBruteConfig {
fn default() -> Self {
SubdomainBruteConfig {
domains: Vec::new(),
resolvers: Vec::new(),
dictionary_file: None,
dictionary: None,
skip_wildcard: false,
bandwidth_limit: Some("256K".to_string()),
verify_mode: false,
max_retries: 5,
dns_timeout_seconds: 10,
max_wait_seconds: 10,
verify_timeout_seconds: 10,
verify_concurrency: 50,
resolve_records: false,
cdn_detect: true,
cdn_collapse: true,
query_types: vec![QueryType::A],
silent: false,
raw_records: false,
device: None,
transport: PacketTransport::Ethernet,
progress_callback: None,
}
}
}