Skip to main content

Security reconnaissance toolkit: passive-first OSINT with active scanning capabilities (port scanning, DirBuster). Scope-aware with explainable findings.

Project description

Recon Sentinel

v1.0.1

Status stars forks Issues Python Contributions Welcome

// Contributed by the Serene-Brew Team
Special thanks to knightsky-cpu

Features

  • Scope guard: refuses out-of-scope targets.
  • Passive modules: CT logs (crt.sh), DNS (A/AAAA/CNAME/MX/TXT/NS) lookups.
  • Port scanning: Active port scanning using nmap with multiple scan modes (default, stealthy, aggressive, comprehensive, UDP, all ports, OS detection, custom).
  • DirBuster: Directory and file brute-forcing to discover hidden web resources.
  • Explainable findings: each item includes why it matters and suggested, approval-gated next steps.
  • Evidence pack: JSON artifacts + Markdown report.
  • Changefeed: simple diff between runs.

[!IMPORTANT]

Disclaimer

This project is a passive-first and active reconnaissance helper intended for lawful security testing, research, and education.

  • Authorized use only. Run this tool only against systems/domains you own or where you have explicit written permission from the owner.
  • You are responsible for your use. Misuse may violate laws (e.g., computer misuse / anti-hacking statutes), contracts, or company policies.
  • No warranty. This software is provided “AS IS” under the MIT License, without warranties of any kind. The maintainers and contributors are not liable for misuse, data loss, or damage resulting from use of this software.
  • Compliance. You agree to comply with all applicable laws, regulations, and organizational policies. Consult your legal counsel for guidance—this is not legal advice.
  • Safety defaults. v0 is passive-only by default (CT + DNS). Active scanning features (port scanning, DirBuster) are opt-in and must be explicitly configured in scope.yaml; you must confirm authorization before enabling them.
  • Evidence handling. Artifacts are stored locally by default. You are responsible for protecting any collected data and removing it when no longer authorized. By using this project, you acknowledge and agree to the above.

Read the full DISCLAIMER & Acceptable Use.

Quickstart

# 1) Install
pip install reconsentinel
# 2) Execute interative run mode 
recon run -i
# 3) Open your casefile
ls runs/*/casefile.md

Smoke Test

Run this to confirm the tool produces a casefile.

pip install reconsentinel
recon run --scope scope.yaml --out runs
test -f "$(ls -1d runs/* 2>/dev/null | head -n1)/casefile.md" && echo "SMOKE TEST PASS"

New Opt-In Flags (Speed & Visibility)

These are additive features; defaults remain conservative (full DNS set, serial lookups). The CLI will print a hint, but you must opt in.

  • Verbose progress: -v, --verbose
    Shows a live spinner and periodic progress (heartbeats) during CT/DNS so you can see that the run is healthy.

  • DNS fast path: --dns-fast
    Resolves and stores only A/AAAA records. This reduces I/O and render time for large scopes. Use when you want quicker casefiles and don’t need MX/TXT/NS on first pass.

  • Skip internal-looking hosts: --skip-internal
    Excludes names that look internal (e.g., *.corp.*, .internal, .local, .lan). Good for public-exposure sweeps. (You can run a full pass later.)

  • Parallel DNS workers: --dns-workers N
    Runs DNS lookups in parallel (e.g., 10–50). Start with 20 and tune for your network/ISP. Default is 0 (serial), which is slow but maximally conservative.

Tip: Combine --dns-fast + --dns-workers for big speedups; add --skip-internal for the fastest public-only sweep.

Configuration (scope.yaml)

ReconSentinel uses a scope.yaml file to define your targets and scanning configuration. Here's an example configuration:

org: Example Corp
domains:
  - example.com
  - example.org
policy:
  passive_only: true
notes: >
  Authorized use only. Targets and data access approved by the owner.
resolvers:
  - 1.1.1.1
  - 8.8.8.8

port_scan_mode:
  - custom  # or: default, aggresive, stealthy, comprehensive, udp, all_ports, os_detection
  - -A -T4
  - cookies: # optional for authenticated scans
    - sessionid:abc123
# Optional: Enable DirBuster
dirbuster_wordlist: dir-buster/wordlists/example.txt

# Optional: Seed hosts for discovery
seeds:
  hosts:
    - lab.example.com

Key fields:

  • org: Organization name (for documentation)
  • domains: List of target domains to scan
  • policy.passive_only: Set to true for passive-only scans (default)
  • resolvers: DNS resolvers to use (defaults to 1.1.1.1 and 8.8.8.8)
  • port_scan_mode: Optional port scanning configuration (see below)
  • dirbuster_wordlist: Optional path to wordlist for DirBuster
  • seeds: Optional seed hosts for discovery

Active Scanning Features

ReconSentinel includes two active scanning modules that can be enabled via configuration in scope.yaml:

Port Scanner

The port scanner uses librpscan (a custom built C++ wrapper around nmap) to perform active port scanning. Configure it in your scope.yaml:

port_scan_mode:
  - aggressive  # or: default, stealthy, comprehensive, udp, all_ports, os_detection, custom
  # Optional: cookies for authenticated scans (as second element with cookies key)
  - cookies:
    - "session_id=abc123"
    - "auth_token=xyz789"

Available scan modes:

  • default: Service version detection on top 1000 ports
  • stealthy: Slow (-T1), SYN stealth (-sS), minimal ports (top 100)
  • aggressive: Fast (-T4), OS detection, NSE scripts (-A)
  • comprehensive: Version detection, NSE scripts, top 10000 ports
  • udp: UDP scan on top 1000 UDP ports
  • all_ports: Scans all 65535 TCP ports (very slow)
  • os_detection: Operating system fingerprinting (requires elevated privileges)
  • custom: User-provided nmap flags

Skip port scanning:

recon run --scope scope.yaml --out runs --skip-port-scan

DirBuster

The direcotry buster uses librdirbuster (a custom built C++ wrapper from scratch) to perform active directory path searcg. Configure it in your scope.yaml:

dirbuster_wordlist: dir-buster/wordlists/example.txt

DirBuster will automatically run against all domains in your scope when a wordlist is provided. It uses concurrent HTTP HEAD/GET probes to discover directories and files with interesting status codes (200, 301, 302, 403).

[!NOTE] Note: Both port scanning and DirBuster are opt-in features. They only run when explicitly configured in your scope.yaml. The tool remains passive-only by default.

Safety & Ethics

  • Passive-first by default: v0 queries public data sources and DNS. Active scanning (port scanning, DirBuster) is opt-in and must be explicitly configured in scope.yaml.
  • Scope.yaml is the law: domains outside scope are ignored.
  • Active scanning requires authorization: Port scanning and DirBuster are active techniques. Only enable them on systems you own or have explicit written permission to test.
  • Logs/artifacts are stored locally by default. You own your data.

Roadmap

  • Weekly scheduled runs + diffs
  • HTTP header/tech fingerprint module
  • Integrations: Amass, Nuclei, Shodan/Censys (with user-provided keys)
  • HTML/PDF export and SARIF/STIX emitters
  • Rate limiting and throttling controls for active scans

[!NOTE]

Community Note from the Maintainer

I’m not a professional programmer or penetration tester—I’m a security-conscious enthusiast who cares about building safer systems. I develop and test ReconSentinel in my own lab on self-hosted, containerized environments, and I do my best to follow sound security practices. v0 is intentionally passive-only by default.

This project is an active work-in-progress. I’m sharing it in good faith with the community and I welcome feedback, issues, and PRs. If you spot risks, design flaws, or ways to improve signal-to-noise, please open an issue or propose a change. Let’s build something genuinely useful and safe together.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

reconsentinel-1.0.1.tar.gz (198.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

reconsentinel-1.0.1-py3-none-any.whl (197.6 kB view details)

Uploaded Python 3

File details

Details for the file reconsentinel-1.0.1.tar.gz.

File metadata

  • Download URL: reconsentinel-1.0.1.tar.gz
  • Upload date:
  • Size: 198.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for reconsentinel-1.0.1.tar.gz
Algorithm Hash digest
SHA256 309c47bccc6014cc2cde83aa10e5f63bdb07d6a70f184492d8f7b495ed12e53b
MD5 2b617e9f9f5e902ef752751266f3a023
BLAKE2b-256 268493bf288c75b414a086e02e996f9753e9db1a9104036d13d729ec0d246267

See more details on using hashes here.

File details

Details for the file reconsentinel-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: reconsentinel-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 197.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for reconsentinel-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a86febfe4bb829fea3e0a5781a866a137adeab05c4e86eb86083ce48914758bf
MD5 a647f0781d881271597e2773d127d183
BLAKE2b-256 6fab91462f90ba037c97b14438876999f2c1560d0e9e0164a7204b6871f76b5f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page