25 releases

new 0.6.9 Nov 29, 2024
0.6.7 Oct 19, 2024
0.6.3 Oct 13, 2023
0.5.2 Jul 30, 2023
0.3.1-beta Oct 27, 2020

#508 in Algorithms

Download history 249/week @ 2024-08-12 18/week @ 2024-09-16 52/week @ 2024-09-23 118/week @ 2024-09-30 66/week @ 2024-10-07 140/week @ 2024-10-14 23/week @ 2024-10-21 2/week @ 2024-10-28 2/week @ 2024-11-04 127/week @ 2024-11-11 13/week @ 2024-11-18 122/week @ 2024-11-25

264 downloads per month

MIT license

135KB
6K SLoC

Twistrs is a domain name permutation and enumeration library that is built on top of async Rust.

The library is designed to be fast, modular and easy-to-use for clients.

The two primary structs to look into are Domain and DomainMetadata.

Additionally the module documentation for permutation and enumeration provides more granular details on how each module may be used indepedently.

domain permutation and enrichment asynchronously.

Example

The following is a trivial example using Tokio mpsc.

use twistrs::enrich::DomainMetadata;
use twistrs::permutate::Domain;

use tokio::sync::mpsc;


#[tokio::main]
async fn main() {
    let domain = Domain::new("google.com").unwrap();
    let permutations = domain.addition();

    let (tx, mut rx) = mpsc::channel(1000);

    for permutation in permutations {
        let domain_metadata = DomainMetadata::new(permutation.domain.fqdn.clone());
        let mut tx = tx.clone();

        tokio::spawn(async move {
            if let Err(_) = tx.send((permutation.clone(), domain_metadata.dns_resolvable().await)).await {
                println!("received dropped");
                return;
            }

            drop(tx);
        });
    }

    drop(tx);

    while let Some(i) = rx.recv().await {
        println!("{:?}", i);
    }
}

Dependencies

~10–22MB
~356K SLoC