loading
loading
Recon
Permute, mutate, and alter subdomains, then brute-force the results.
overview
dmut takes a list of subdomains you already know and generates permutations, mutations, and alterations of them, then resolves each candidate to keep only the names that exist. Hosts get named in patterns, so dev1, dev2, and dev-staging tend to live next to a dev host you already found.
It handles generation and DNS validation in one pass. A pool of workers resolves candidates in parallel against a list of public resolvers, with retry, timeout, and error-limit controls plus an option to refresh the resolver list, so a large permutation set collapses into a clean set of live hosts without a separate massdns step.
On Trickest, dmut is a Recon node that reads a subdomains file and a mutation dictionary and writes a file and a folder of resolved results. Run it after passive discovery like subfinder to reach names those sources miss, then hand the live hosts to httpx for probing.
source github.com/bp0lr/dmut
use cases
Feed dmut the output of passive discovery and a mutation dictionary to generate and resolve permutations that certificate logs and DNS aggregators never returned.
Use the built-in worker pool and resolver list to resolve every generated candidate directly, so permutation and DNS validation happen inside a single node.
Tune --workers, --dns-retries, --dns-timeout, and --dns-errorLimit, and refresh the public resolver list, so a large job stays accurate instead of drowning in failed queries.
Pass dmut's resolved names to httpx to learn which mutated hosts respond over HTTP, then carry the live surface into the rest of the workflow.
reference
| Name | Type | Flag | Description |
|---|---|---|---|
| subdomains | FILE | · | Subdomains to generate permutations for (piped in on stdin). |
| dictionary | FILE | -d | Dictionary file containing the mutation list. |
| dns-servers-file | FILE | -s | Resolve using DNS servers from this file. |
| dns-servers-list | STRING | --dnsServers | Resolve using DNS servers from a comma-separated list. |
| workers | STRING | --workers | Number of concurrent workers (default 25). |
| dns-retries | STRING | --dns-retries | Max retries for failed DNS queries (default 3). |
| update-dns-list | BOOLEAN | --update-dnslist | Download a fresh list of validated public DNS resolvers. |
| show-ip | BOOLEAN | --show-ip | Display the resolved IP for valid results. |
Showing key inputs. dmut exposes 13 inputs in total.
| Name | Type | Flag | Description |
|---|---|---|---|
| show-ip | BOOLEAN | --show-ip | Display extra info, including the resolved IP, for valid results. |
| verbose | BOOLEAN | --verbose | Add verbosity to the process. |
| workers | STRING | --workers | Number of concurrent workers (default 25). |
| dictionary | FILE | -d | Dictionary file containing the mutation list. |
| show-stats | BOOLEAN | --show-stats | Display stats about the current job. |
| subdomains | FILE | · | Subdomains to generate permutations for, read on stdin. |
| target-url | STRING | --url | Single target to generate permutations for. |
| dns-retries | STRING | --dns-retries | Max retries for failed DNS queries (default 3). |
| dns-timeout | STRING | --dns-timeout | DNS server timeout in milliseconds (default 500). |
| dns-error-limit | STRING | --dns-errorLimit | Number of errors before a DNS server is disabled (default 25). |
| update-dns-list | BOOLEAN | --update-dnslist | Download a list of periodically validated public DNS resolvers. |
| dns-servers-file | FILE | -s | Use DNS servers from this file. |
| dns-servers-list | STRING | --dnsServers | Use DNS servers from a comma-separated list. |
example
# mutate a known subdomain list and resolve the live candidatescat known-subdomains.txt | dmut -d mutations.txt --workers 100 --dns-retries 5 --show-ip --update-dnslist -o resolved.txtdev2.example.com [198.51.100.24]dev-staging.example.com [198.51.100.25]api-uat.example.com [198.51.100.61]api-dev.example.com [203.0.113.12]admin-staging.example.com [203.0.113.48]vpn2.example.com [198.51.100.90]grafana-dev.example.com [203.0.113.77]… (41 of 9,120 permutations resolved in the run behind this page)guidance
Use dmut after passive discovery to mutate known subdomains and resolve the permutations in one step. For generating permutations without resolving them, use dnsgen or gotator and pass the candidates to a resolver. dmut finds names; follow it with httpx to see which respond over HTTP.
Generates permutations only. dmut also resolves the candidates in the same run.
Permutation generator with flexible rules. Pair it with a resolver; dmut bundles resolution.
Another alteration-based generator. dmut combines mutation and brute-force validation.
faq
related
Asynchronous DNS brute-force tool for fast subdomain enumeration.
OWASP Amass: network mapping and external asset discovery.
OWASP Amass intel: find an organization's root domains and ranges.
OWASP Amass enumeration that produces structured JSON output.
Find related domains and subdomains via shared Google Analytics IDs.
Find domains and subdomains potentially related to a given domain.
A known subdomain list and a mutation dictionary feed dmut, which generates permutations, resolves them, and writes the live names as output.
Facts on this page come from the live Trickest tool library.