Skip to main content

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 report
  • diff: 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: diff exits 1 when something changed and 0 when nothing did
  • No Python dependencies beyond the standard library

Requirements

  • Python 3.8+
  • subfinder and httpx (ProjectDiscovery's Go versions) on your PATH
  • gowitness (optional, only for --screenshots)

Note: httpx must be ProjectDiscovery's tool, not the Python httpx library. On Kali/Debian/Ubuntu it is often packaged as httpx-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-wildcard to 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)
  • --threads and --timeout options
  • 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)

Source distribution for reconflow 0.2.2
File Size Uploaded Provenance
reconflow-0.2.2.tar.gz 18.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for reconflow 0.2.2
File Interpreter ABI Platform
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.

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page