reconflow
Recon for bug bounty hunters that tells you what changed since your last scan.
reconflow chains subfinder and httpx into one command, filters out wildcard DNS noise, saves a snapshot of every run, and lets you diff any two runs to see new subdomains, newly live hosts, and changed responses.
Use responsibly. Only scan domains you own or that are explicitly in scope for a bug bounty / pentest program you are authorized to test.
Features
scan: finds subdomains, drops wildcard DNS false positives (including rotating IP pools), probes live hosts for status code, title and technologies, and writes a Markdown reportdiff: compares your two most recent scans of a domain and highlights what's new- Scan history: every scan saves a structured snapshot, so nothing is overwritten
- Cron-friendly:
diffexits1when something changed and0when nothing did - No Python dependencies beyond the standard library
Requirements
- Python 3.8+
subfinderandhttpx(ProjectDiscovery's Go versions) on yourPATHgowitness(optional, only for--screenshots)
Note:
httpxmust be ProjectDiscovery's tool, not the Pythonhttpxlibrary. On Kali/Debian/Ubuntu it is often packaged ashttpx-toolkit. reconflow checks for both names and verifies the binary.
Check your tools:
subfinder -version
httpx -version
Install
From PyPI:
pip install reconflow
From source:
git clone https://github.com/ErenYeager1836/reconflow.git
cd reconflow
pip install -e .
Usage
reconflow scan example.com
reconflow diff example.com
You can also run it as a module: python -m reconflow scan example.com
scan
| Option | Description |
|---|---|
domain |
Target domain (required, must be in scope) |
-o, --output |
Output folder (default: output) |
--threads |
Number of threads for probing (default: 10) |
--timeout |
Timeout in seconds for probing (default: 5) |
--keep-wildcard |
Warn about wildcard DNS but don't filter wildcard results |
--json |
Also write structured results to report.json |
--screenshots |
Capture screenshots of live hosts (requires gowitness) |
diff
| Option | Description |
|---|---|
domain |
Target domain to compare runs for (required) |
-o, --output |
Output folder (default: output) |
--json |
Print the comparison as JSON |
diff needs at least two saved scans of the same domain. Run scan twice first.
Track changes with diff
Most recon tools tell you what exists. reconflow also tells you what changed. New subdomains and newly live hosts are often the least-tested parts of a target.
Example output (illustrative):
[*] Recon diff: 2026-10-18_185218 -> 2026-10-18_190412
============================================================
[+] NEW SUBDOMAINS (2):
+ beta.example.com
+ staging-api.example.com
[+] NEWLY LIVE HOSTS (1):
+ https://beta.example.com [200] [Beta Portal] [Nginx, React]
[*] CHANGED HOSTS (1):
~ https://admin.example.com
status: 403 -> 200
title: 'Forbidden' -> 'Admin Login'
tech: ['Apache'] -> ['Apache', 'PHP']
[-] Removed subdomains (1) [informational]:
- old.example.com
============================================================
Removed subdomains are informational only, because subfinder's sources can return slightly different results between runs.
Exit codes
| Code | Meaning |
|---|---|
0 |
No changes found (or not enough history to compare) |
1 |
Changes were detected |
Run it on a schedule
# Every 6 hours: rescan and log changes
0 */6 * * * reconflow scan example.com && reconflow diff example.com >> ~/recon-changes.log
Output
Files are saved under output/<domain>/:
subdomains.txt all discovered subdomains
live.txt live hosts with status code, title, tech
report.md summary report
report.json structured report (with --json)
screenshots/ screenshots of live hosts (with --screenshots)
runs/<run_id>/ snapshot of each scan, used by diff
Known limitations
- Wildcard DNS domains return many fake "live" hosts that all point to the same server. reconflow detects them and filters those hosts (use
--keep-wildcardto disable). - Discovery depends on subfinder's sources, so results can vary between runs.
Roadmap
- Subdomain discovery and live host probing
- Wildcard DNS detection (including rotating IP pools)
-
--threadsand--timeoutoptions - JSON report output
- Screenshots of live hosts
- Scan history and
reconflow diff -
reconflow scope: check targets against program scope -
reconflow report: regenerate reports from saved scans -
--notify: Discord/Slack webhook alerts for diff results - Save results as they come in
Contributing
Contributions are welcome. Look for issues labelled good first issue. Run the tests with:
python -m unittest discover tests -v
License
MIT
Metadata
Release files for reconflow 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| reconflow-0.2.2.tar.gz | 18.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| reconflow-0.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.9 kB
Release files / reconflow-0.2.2.tar.gz
| Download URL | reconflow-0.2.2.tar.gz |
|---|---|
| Size | 18.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e34c6a15661c885f417877171102b93b95841ea48da34014dd2186c6f14a928b
|
|
BLAKE2b-256 checksum How to use checksums |
04153dfb1715ae9a490442612be853c82b05aa93c4c753e470041a3282c84b82
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.15.0
|
Release files / reconflow-0.2.2-py3-none-any.whl
| Download URL | reconflow-0.2.2-py3-none-any.whl |
|---|---|
| Size | 14.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e62a5c7bbe399243075a87c6779558e3edb9b1086c898dd9a1748757d207b476
|
|
BLAKE2b-256 checksum How to use checksums |
aafc4e1ca9ecbbbeb370bee066293412285bbe12c54fb26425f4f76396d99eda
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.15.0
|
Security for reconflow 0.2.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.