subscan 1.3.0

A subdomain enumeration tool leveraging diverse techniques, designed for advanced pentesting operations
Documentation
# Requesters

Requesters are components designed to manage HTTP requests through a unified interface. Each requester offers unique features, and when HTTP requests are needed during subdomain discovery, the appropriate requester can be selected based on the requirements.

`Subscan` includes predefined requesters like

- [ChromeBrowser]https://docs.rs/subscan/latest/subscan/requesters/chrome/struct.ChromeBrowser.html

    This requester component runs a `Chrome` process in the background, allowing HTTP requests through the browser. It has advantages such as rendering `JavaScript`, bypassing anti-bot systems, etc.

- [HTTPClient]https://docs.rs/subscan/latest/subscan/requesters/client/struct.HTTPClient.html

    The HTTP client requester component is identical to the standard HTTP client, using the [reqwest]https://docs.rs/reqwest/latest/reqwest/ crate's client as its implementation

## Create Your Custom Requester

Each requester component should be implemented following the interface below. For a better understanding, you can explore the [docs.rs](https://docs.rs/subscan/latest/subscan/interfaces/requester/index.html) page and review the crates listed below

- [`async_trait`]https://github.com/dtolnay/async-trait
- [`enum_dispatch`]https://gitlab.com/antonok/enum_dispatch

```rust,ignore
#[async_trait]
#[enum_dispatch]
pub trait RequesterInterface: Sync + Send {
    // Returns requester configurations as a RequesterConfig object
    async fn config(&mut self) -> &mut RequesterConfig;
    // Configure current requester object by using new RequesterConfig object
    async fn configure(&mut self, config: RequesterConfig);
    // HTTP GET method implementation to fetch HTML content from given source URL
    async fn get_content(&self, url: Url) -> Result<Content>;
}
```

Below is a simple example of a custom requester. For more examples, you can check the [examples/](https://github.com/eredotpkfr/subscan/tree/main/examples) folder on the project's GitHub page. You can also refer to the source code of predefined requester implementations for a better understanding

```rust,ignore
pub struct CustomRequester {
    config: RequesterConfig,
}

#[async_trait]
impl RequesterInterface for CustomRequester {
    async fn config(&mut self) -> &mut RequesterConfig {
        &mut self.config
    }

    async fn configure(&mut self, config: RequesterConfig) {
        self.config = config;
    }

    async fn get_content(&self, _url: Url) -> Result<Content> {
        Ok(Content::Empty)
    }
}
```