Skip to content

Commit

Permalink
test: add zonetransfer module tests
Browse files Browse the repository at this point in the history
  • Loading branch information
eredotpkfr committed Nov 7, 2024
1 parent df6c61d commit 704a4c3
Show file tree
Hide file tree
Showing 47 changed files with 573 additions and 318 deletions.
2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ futures = "0.3.31"
headless_chrome = { version = "1.0.15", features = ["fetch"] }
hickory-client = { version = "0.24.1", default-features = false }
hickory-resolver = "0.24.1"
itertools = "0.13.0"
lazy_static = "1.5.0"
log = "0.4.22"
prettytable-rs = "0.10.0"
Expand All @@ -35,6 +36,7 @@ tokio-util = "0.7.12"

[dev-dependencies]
automod = "1.0.14"
hickory-server = "0.24.1"
md5 = "0.7.0"
stubr = "0.6.2"
tempfile = "3.13.0"
Expand Down
22 changes: 12 additions & 10 deletions src/modules/zonetransfer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,20 @@ impl ZoneTransfer {
zonetransfer.into()
}

async fn get_default_ns(&self) -> Option<NameServerConfig> {
pub async fn get_default_ns(&self) -> Option<NameServerConfig> {
let tcp = |ns: &&NameServerConfig| ns.protocol == Tcp;

if let Ok((config, _)) = system_conf::read_system_conf() {
config.name_servers().iter().find(tcp).cloned()
} else {
NameServerConfigGroup::google().iter().find(tcp).cloned()
NameServerConfigGroup::cloudflare()
.iter()
.find(tcp)
.cloned()
}
}

async fn get_async_client(&self, server: SocketAddr) -> Option<AsyncClient> {
pub async fn get_async_client(&self, server: SocketAddr) -> Option<AsyncClient> {
type WrappedStream = AsyncIoTokioAsStd<TokioTcpStream>;

let (stream, sender) = TcpClientStream::<WrappedStream>::new(server);
Expand All @@ -69,11 +72,9 @@ impl ZoneTransfer {
}
}

async fn get_ns_records_as_ip(&self, domain: &str) -> Option<Vec<SocketAddr>> {
let default_ns = self.get_default_ns().await?;

pub async fn get_ns_as_ip(&self, server: SocketAddr, domain: &str) -> Option<Vec<SocketAddr>> {
let mut ip_addresses = vec![];
let mut client = self.get_async_client(default_ns.socket_addr).await?;
let mut client = self.get_async_client(server).await?;

let name = Name::from_str(domain).unwrap();
let ns_response = client.query(name, DNSClass::IN, RecordType::NS);
Expand All @@ -83,7 +84,7 @@ impl ZoneTransfer {
let a_response = client.query(name, DNSClass::IN, RecordType::A).await;

for answer in a_response.ok()?.answers() {
let with_port = format!("{}:53", answer.data()?);
let with_port = format!("{}:{}", answer.data()?, server.port());
let socketaddr = SocketAddr::from_str(&with_port);

ip_addresses.push(socketaddr.ok()?)
Expand All @@ -93,7 +94,7 @@ impl ZoneTransfer {
Some(ip_addresses)
}

async fn attempt_zone_transfer(&self, server: SocketAddr, domain: &str) -> Vec<Subdomain> {
pub async fn attempt_zone_transfer(&self, server: SocketAddr, domain: &str) -> Vec<Subdomain> {
let mut client = self.get_async_client(server).await.unwrap();
let mut subs = vec![];

Expand Down Expand Up @@ -135,8 +136,9 @@ impl SubscanModuleInterface for ZoneTransfer {

async fn run(&mut self, domain: &str) -> SubscanModuleResult {
let mut result: SubscanModuleResult = self.name().await.into();
let server = self.get_default_ns().await.unwrap().socket_addr;

if let Some(ips) = self.get_ns_records_as_ip(domain).await {
if let Some(ips) = self.get_ns_as_ip(server, domain).await {
for ip in ips {
result.extend(self.attempt_zone_transfer(ip, domain).await);
}
Expand Down
17 changes: 12 additions & 5 deletions src/types/query.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use super::core::Subdomain;
use itertools::Itertools;
use reqwest::Url;
use std::collections::BTreeSet;

Expand Down Expand Up @@ -187,14 +188,20 @@ impl SearchQuery {
/// let param = SearchQueryParam::from("s");
/// let mut query = SearchQuery::new(param, "site:", "foo.com");
///
/// assert_eq!(query.as_search_str(), "site:foo.com".to_string());
/// assert_eq!(query.as_search_str(), "site:foo.com");
///
/// query.update("bar.foo.com".into());
///
/// assert_eq!(query.as_search_str(), "site:foo.com -bar")
/// ````
pub fn as_search_str(&mut self) -> String {
let asvec = Vec::from_iter(self.state.clone());
let long_prefix = format!("{}{}", self.prefix, self.domain);
let formatted = format!("{} {}", long_prefix, asvec.join(" "));
let suffix = self.state.iter().join(" ");

formatted.trim().to_string()
if suffix.is_empty() {
format!("{}{}", self.prefix, self.domain)
} else {
format!("{}{} {}", self.prefix, self.domain, suffix)
}
}

/// According to given `base_url` returns searchable
Expand Down
214 changes: 0 additions & 214 deletions tests/modules/common.rs

This file was deleted.

6 changes: 6 additions & 0 deletions tests/modules/common/constants.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
pub const LOCAL_HOST: &str = "127.0.0.1";
pub const TEST_URL: &str = "http://foo.com";
pub const TEST_DOMAIN: &str = "foo.com";
pub const TEST_BAR_SUBDOMAIN: &str = "bar.foo.com";
pub const TEST_BAZ_SUBDOMAIN: &str = "baz.foo.com";
pub const TEST_API_KEY: &str = "test-api-key";
Loading

0 comments on commit 704a4c3

Please sign in to comment.