Updated Jul 14, 2026

Recon

Enumerate a domain's subdomains from passive sources

A subdomain discovery tool that finds valid subdomains using passive online sources.

Agent

overview

What subfinder does

subfinder enumerates a domain's subdomains by querying passive sources such as certificate transparency logs, DNS aggregators, and threat-intelligence feeds, rather than brute forcing names. That makes it fast and quiet: it builds a broad map of an organization's footprint without sending traffic to the targets themselves.

Its modular architecture is built for one job and does it well. Pull from all sources for maximum coverage or a chosen few for speed, set per-provider rate limits, and emit JSONL so every result is a structured record. Active mode resolves the names and reports only the subdomains that are live.

On Trickest, subfinder is a Recon node that takes a domain or a list of domains and writes a file and a folder of names. It is the usual first node in an attack-surface workflow; pass its output to httpx to find which subdomains respond, and schedule it for continuous monitoring.

source github.com/projectdiscovery/subfinder

use cases

Where subfinder fits

Map an organization's footprint

Enumerate every subdomain of a domain from passive sources to scope an engagement or build an asset inventory.

Feed a probing and scanning pipeline

Hand discovered subdomains to httpx and a scanner so the rest of the workflow runs against the full surface.

Monitor for new subdomains

Run subfinder on a schedule and diff results to catch newly exposed assets as they go live.

Enumerate many domains at once

Supply a file of domains for bulk discovery and write the combined name list for downstream nodes.

reference

subfinder inputs and flags

30 inputs
NameTypeFlagDescription
domainSTRING-domainDomains to find subdomains for (comma-separated).
listFILE-listFile containing a list of domains for bulk discovery.
jsonBOOLEAN-jsonWrite output in JSONL format.
allBOOLEAN-allUse all sources for enumeration (slow).
activeBOOLEAN-activeDisplay active subdomains only.
matchSTRING-matchSubdomain or list of subdomains to match (comma-separated).
rate-limitSTRING-rate-limitMaximum HTTP requests to send per second (global).
sourcesSTRING-sourcesSpecific sources to use for discovery (-s crtsh,github).

Showing key inputs. subfinder exposes 30 inputs in total.

Full flag reference (30 inputs)
NameTypeFlagDescription
ipBOOLEAN-ipinclude host IP in output (-active only)
allBOOLEAN-alluse all sources for enumeration (slow)
jsonBOOLEAN-jsonwrite output in JSONL(ines) format
listFILE-listfile containing list of domains for subdomain discovery
matchSTRING-matchsubdomain or list of subdomain to match (comma separated)
proxySTRING-proxyhttp proxy to use with subfinder
statsBOOLEAN-statsreport source statistics
activeBOOLEAN-activedisplay active subdomains only
configFILE-configflag config file
domainSTRING-domaindomains to find subdomains for (comma separated)
filterSTRING-filtersubdomain or list of subdomain to filter (comma separated)
silentBOOLEAN-silentshow only subdomains in output
sourcesSTRING-sourcesspecific sources to use for discovery (-s crtsh,github).
threadsSTRING-tnumber of concurrent goroutines for resolving (-active only) (default 10)
timeoutSTRING-timeoutseconds to wait before timing out (default 30)
verboseBOOLEAN-vshow verbose output
max-timeSTRING-max-timeminutes to wait for enumeration results (default 10)
no-colorBOOLEAN-no-colordisable color in output
recursiveBOOLEAN-recursiveuse only sources that can handle subdomains recursively (e.g. subdomain.domain.tld vs domain.tld)
resolversSTRING-rcomma separated list of resolvers to use
exclude-ipBOOLEAN-exclude-ipexclude IPs from the list of domains
match-fileFILE-matchsubdomain or list of subdomain to match
rate-limitSTRING-rate-limitmaximum number of http requests to send per second (global)
filter-fileFILE-filtersubdomain or list of subdomain to filter
rate-limitsSTRING-rate-limitsmaximum number of http requests to send per second four providers in key=value format (-rls hackertarget=10/m) (default ["github=30/m", "fullhunt=60/m", "robtex=18446744073709551615/ms", "securitytrails=1/s", "shodan=1/s", "virustotal=4/m", "hackertarget=2/s", "waybackarchive=15/m", "whoisxmlapi=50/s"])
resolvers-listFILE-rlistfile containing list of resolvers to use
collect-sourcesBOOLEAN-collect-sourcesinclude all sources in the output (-json only)
exclude-sourcesSTRING-exclude-sourcessources to exclude from enumeration (-es alienvault,zoomeyeapi)
provider-configFILE-provider-configprovider config file
disable-update-checkBOOLEAN-disable-update-checkdisable automatic subfinder update check

example

Run subfinder

subfinder · command
# passive enumeration across all sources, quiet outputsubfinder -d example.com -all -silent -o subdomains.txt
sample output
api.example.comapp.example.comstaging.example.comdev.example.commail.example.comvpn.example.comgitlab.example.comgrafana.example.comhive-api.dev.example.comwww.staging.example.com…  (53 hosts found for the real run behind this page)

guidance

Choosing subfinder

Use subfinder for fast, passive subdomain discovery at the start of a workflow. For active DNS brute forcing of a wordlist, pair it with subbrute. It finds names, it does not test them, so follow it with httpx to learn which subdomains are live.

amass

Deeper, slower OSINT with active options. subfinder is quicker for a passive first pass.

assetfinder

Lighter passive finder. subfinder queries more sources for broader coverage.

faq

subfinder questions

Pass the domain with -domain, for example `subfinder -domain example.com`. Add -silent to print only the subdomains. On Trickest, set the node's domain input instead of the flag.

Run subfinder yourself

A domain feeds subfinder, which enumerates subdomains passively and passes them to httpx so only live names land as output.

Facts on this page come from the live Trickest tool library.