Bug Bounty Recon Framework (Parallel Edition)
Reconflex aggregates subdomains from 8 sources simultaneously, giving you broader coverage than any single tool alone.
Sources: VirusTotal, SecurityTrails, crt.sh, Shodan, Chaos, AlienVault OTX, Subfinder
- Parallel Execution - All 7 API sources queried at the same time
- Pre-flight Checks - Validates API keys via real requests and tools before scan starts
- Subdomain Enumeration - Single domain or batch mode from a list
- Domain Acquisition - Discover associated/related domains via SecurityTrails + OTX
- IP Enumeration - CIDR and IP discovery via SecurityTrails + Shodan SSL
- Subdomain Expansion - Generate and bruteforce permutations with alterx + shuffledns
- Live Check - Verify which subdomains are actually alive with httpx
- Silent Mode - Pipe-friendly output for chaining with other tools
- Source Selection - Choose specific sources with
--sources vt,st,crtsh - Custom Scan Naming - Name your scan directory with
--name - Domain Validation - Validates input before firing API calls
- Retry/Backoff - Unified exponential backoff across all API modules
- crt.sh Fallback - Automatically falls back to Certspotter if crt.sh is down
git clone https://github.com/omaronsec/reconflex.git
cd reconflexpip install -r requirements.txtIf you get
externally-managed-environmenterror (Debian/Ubuntu/Kali):pip install --break-system-packages -r requirements.txt
Make sure Go is installed, then run:
chmod +x setup.sh
./setup.shThis installs: subfinder, httpx, alterx, shuffledns, anew, massdns, and the Shodan CLI.
Update tools later with:
./setup.sh --updatecp .env.example .envEdit .env and add your API keys:
OTX_API_KEY=your_key_here
SECURITYTRAILS_API_KEY=your_key_here
VIRUSTOTAL_API_KEY=your_key_here
CHAOS_API_KEY=your_key_here
Where to get the keys:
| Service | Sign Up |
|---|---|
| AlienVault OTX | https://otx.alienvault.com |
| SecurityTrails | https://securitytrails.com |
| VirusTotal | https://virustotal.com |
| Chaos (ProjectDiscovery) | https://chaos.projectdiscovery.io |
shodan init YOUR_SHODAN_API_KEYpython3 config.pyThis checks all API keys, tools, and required files are properly configured.
python3 reconflex.py -u example.compython3 reconflex.py -l domains.txtpython3 reconflex.py -l domains.txt --name abbvie-q1python3 reconflex.py -u example.com -livepython3 reconflex.py -u example.com -expandpython3 reconflex.py -l domains.txt -expand -livepython3 reconflex.py -ips-d example.com
python3 reconflex.py -ips-l targets.txtpython3 reconflex.py -ips-enum-d example.com
python3 reconflex.py -ips-enum-d example.com -livepython3 reconflex.py -acq example.com
python3 reconflex.py -acq example.com -email abbvie,caterpillarpython3 reconflex.py -acq-enum example.com -live -pd 5 -expandpython3 reconflex.py -u example.com --silent | httpx | nucleipython3 reconflex.py -u example.com --sources vt,st,crtsh,shodanpython3 reconflex.py -l domains.txt -pd 5output/
|-- quick_results/ (Single domain: -u)
| +-- example.com_subdomains.txt
| +-- live_example.com_subdomains.txt
| +-- all_in_one_example.com.txt (if -expand)
| +-- live_all_in_one_example.com.txt (if -expand -live)
|
|-- scans/ (Batch scans: -l, -acq-enum, -ips-enum-l)
| +-- 2026-01-05_abbvie-q1/ (--name abbvie-q1)
| | +-- per_domain/
| | | +-- sub.example.com.txt (flat file per domain, skipped if 0 results)
| | +-- all_subdomains.txt (all unique subdomains combined)
| | +-- live_subdomains.txt (if -live)
| | +-- subdomains_by_domain.txt (grouped view per domain)
| | +-- domains_with_results.txt (only domains that had results)
| | +-- summary.txt (scan summary report)
| | +-- ips/ (if -ips-enum-l)
| | +-- all_ips.txt
| | +-- ips_for_example.com.txt
|
|-- acquisition/ (Acquisition: -acq)
| +-- example.com_acquisition.txt
|
+-- ips/ (IP enumeration: -ips-d, -ips-l)
+-- ips_for_example.com_05_01.txt
| Flag | Description |
|---|---|
-u DOMAIN |
Single target domain |
-l FILE |
File with list of domains |
-live |
Check for live subdomains (httpx) |
-expand |
Run subdomain expansion (alterx + shuffledns) |
-pd N |
Parallel domain count (default: 3) |
--name NAME |
Custom name for the scan directory |
--silent |
Silent mode - results only, no banner/progress |
--sources SOURCES |
Select sources (e.g., vt,st,crtsh,shodan,chaos,otx,sf) |
-ips-d DOMAIN |
IP enumeration for single domain |
-ips-l FILE |
IP enumeration for domain list |
-ips-enum-d DOMAIN |
Subdomain + IP enumeration |
-ips-enum-l FILE |
Subdomain + IP enumeration for list |
-acq DOMAIN |
Find associated domains |
-acq-enum DOMAIN |
Acquisition + subdomain enumeration |
-email DOMAINS |
Email domain filters for acquisition |
python3 -m unittest tests.test_utils -v