랭킹으로 돌아가기

guelfoweb/knockpy

Pythongithub.com/guelfoweb/knockpy

Knock Subdomain Scan

bugbountyknockpypenetration-testingsecuritysubdomainsubdomain-enumerationsubdomain-scanner
스타 성장
스타
4.2k
포크
878
주간 성장
이슈
59
2k4k
2014년 2월2018년 3월2022년 5월2026년 7월
아티팩트PyPIpip install knockpy
README

🔍 Knockpy Subdomain Scan v9.0

✅ Fast & Async • 🔐 Recon + Brute • 🔧 Easy to Extend

KnockPy is a modular Python 3 tool to enumerate subdomains via passive reconnaissance and bruteforce, now with async/await support, enhanced performance, and modern HTTP/TLS handling.


🚀 Features (v9)

  • Async scanning with httpx and DNS resolution
  • ✅ Modular: plug new passive sources easily
  • 🔍 Supports passive recon, bruteforce, or both
  • 🎨 Formatted terminal output with Rich (tables, progress, panels)
  • 📜 Validates HTTP/HTTPS status, TLS cert, and IP
  • ⚠️ Detects legacy TLS support (TLS 1.0/1.1) as warning in CLI/verbose/HTML report
  • 🧾 Checks AXFR (zone transfer) on root domain during domain-mode scans
  • 🔎 --verbose single-domain diagnostics (DNS/TCP/TLS/redirect chains/request errors + security checks)
  • 💡 Supports wildcard DNS detection
  • 🧪 SQLite reports with interactive catalog (show/delete/export/search)
  • 🔐 Supports VirusTotal and Shodan API
  • 🚀 Optimized bruteforce runtime with TLS-probe endpoint caching (no timeout changes required)

📦 Installation

git clone https://github.com/guelfoweb/knockpy.git
cd knockpy
# recommended: install in a virtual environment
python3 -m venv .venv
. .venv/bin/activate
python3 -m pip install -U pip
pip install .

# alternative: install for the current user (no venv)
# python3 -m pip install --user .

⚠️ Recommended Python version: 3.9+

🧱 Project Structure

The codebase is organized by responsibility, with stable facades for backward compatibility:

knockpy/
  cli.py                   # CLI entrypoint (facade/orchestration)
  cli_parts/
    status.py              # runtime/status panel rendering
    setup.py               # interactive setup and persisted runtime defaults
    report.py              # interactive report mode
    scan_flow.py           # exclude rules, recon-test, wildcard helpers
  core.py                  # public core facade (compatibility)
  engine/
    runtime.py             # scanning engine implementation
  storage.py               # public storage facade (compatibility)
  storage_parts/
    db.py                  # SQLite persistence/settings
    export.py              # report export orchestration
    html_report.py         # HTML report rendering
  output.py                # terminal output rendering
  server_versions.py       # web-server versions catalog
  knockpy.py               # compatibility module exports

Compatibility note:

  • Preferred external imports: import knockpy or from knockpy import KNOCKPY.
  • Internal modules are split into engine/, cli_parts/, and storage_parts/.

Using pip

Only after the stable version is released on GitHub

pip install knock-subdomains

🧪 Usage

knockpy -d domain.com [options]

Options

Flag Description
-d, --domain Target domain (or stdin if used without value)
-f, --file File with list of domains
--recon Enable passive reconnaissance
--bruteforce, --brute Enable bruteforce using wordlist
--exclude TYPE VALUE Exclude matches (status, length/lenght, body)
--verbose Deep diagnostics for single-domain scans only
--wildcard Test wildcard DNS and exit
--test With --recon, test each recon source (failed/empty/data)
--setup Interactive setup (runtime defaults + API keys in DB)
--update-versions Update local latest web-server versions catalog
--report [ID|latest|list] Report mode (interactive show/delete/export/search/reset db, export HTML)
--check-update Check online if a newer Knockpy release is available on PyPI
--wordlist Runtime override for wordlist
--dns Runtime override for DNS resolver
--useragent Runtime override for HTTP user-agent
--timeout Runtime override for timeout (seconds)
--threads Runtime override for concurrent workers
--silent Hide progress bar
--json JSON-only output (forces --silent)
--status Print runtime status and continue
-h, --help Show help message

Performance Tuning: --threads and --timeout

These two options have the biggest impact on runtime for large scans.

  • --threads controls concurrency (how many targets are processed in parallel)
  • --timeout controls how long each network step waits before giving up

Trade-off:

  • higher threads = faster scans, but more load on CPU/network/DNS and higher risk of remote rate-limits
  • lower timeout = faster scans, but higher risk of missing slow yet valid targets (false negatives)

Recommended profiles:

  • small/accurate scan (few domains): --threads 50 --timeout 5
  • balanced scan: --threads 150 --timeout 4
  • large scan (10k+ domains): start with --threads 250 --timeout 3

If you need both speed and completeness on very large lists, use 2-pass strategy:

  1. fast pass: --threads 250 --timeout 3
  2. retry pass only on missing/uncertain targets: --threads 80 --timeout 5 (or higher)

Notes:

  • CLI values always override saved setup values
  • saved setup values (--setup) override built-in defaults
  • current built-in defaults are threads=250, timeout=3

📌 Examples

🔎 Recon + Brute

knockpy -d example.com --recon --bruteforce

🧪 Recon services test

knockpy -d example.com --recon --test

🔄 Update web-server latest versions catalog

knockpy --update-versions

🆕 Check for Knockpy updates

knockpy --check-update

⚙️ Recon sources config (editable)

At first run, KnockPy creates:

~/.knockpy/recon_services.json

You can add/disable sources by editing the services array. You can also point to a custom file path without changing code:

export KNOCK_RECON_SERVICES=/path/to/recon_services.json

Each service supports:

  • name
  • enabled (true/false)
  • parser
  • url_template (supports {domain}, {virustotal_key}, {shodan_key})
  • requires_api (virustotal or shodan, optional)

Supported parsers:

  • csv_first_column
  • rapiddns_html_td
  • json_list
  • virustotal_subdomains
  • shodan_subdomains

📥 Domain from stdin

echo "example.com" | knockpy -d

🧠 API Keys (optional)

export API_KEY_VIRUSTOTAL=your-virustotal-api-key
export API_KEY_SHODAN=your-shodan-api-key

You can use .env file:

API_KEY_VIRUSTOTAL=your-virustotal-api-key
API_KEY_SHODAN=your-shodan-api-key

💾 Reports (SQLite + Interactive HTML export)

knockpy -d example.com --recon --bruteforce
knockpy --report list
knockpy --report latest
knockpy --report

Interactive report menu:

  • 1 show
  • 2 delete
  • 3 export
  • 4 search
  • 0 reset db (asks explicit confirmation)

Exit report mode:

  • press Enter on empty action prompt
  • or press CTRL+C

🔍 Single-domain diagnostics

knockpy -d forum.example.com --verbose

🧪 Wildcard test only

knockpy -d example.com --wildcard

🧬 Python API Usage

KnockPy can be used as a Python module:

import knockpy

result = knockpy.KNOCKPY("example.com", timeout=5.0, threads=20)
print(result["domain"], result["ip"])

or:

from knockpy import KNOCKPY

domain = 'example.com'

results = KNOCKPY(
    domain,
    dns="8.8.8.8",
    useragent="Mozilla/5.0",
    timeout=5,
    threads=10,
    recon=True,
    bruteforce=True,
    wordlist=None,
    silent=False
)

for entry in results:
    print(entry['domain'], entry['ip'], entry['http'], entry['cert'])

📂 Wordlist

A default wordlist is included in knockpy/wordlist/wordlist.txt. You can supply your own with --wordlist.

Test

python3 -m pytest

# (optional) smoke-run example script
python3 examples/poc.py

📖 License

Licensed under the GPLv3 license.

Gianni Amato (@guelfoweb)

관련 저장소
swisskyrepo/PayloadsAllTheThings

A list of useful payloads and bypass for Web Application Security and Pentest/CTF

PythonPyPIMIT Licensepentestpayload
swisskyrepo.github.io/PayloadsAllTheThings/
79.3k17.2k
maurosoria/dirsearch

Web path scanner

PythonPyPIfuzzerfuzzing
14.5k2.4k
projectdiscovery/subfinder

Fast passive subdomain enumeration tool.

GoGo ModulesMIT Licensesubdomain-enumerationosint
projectdiscovery.io
14k1.6k
projectdiscovery/nuclei-templates

Community curated list of templates for the nuclei engine to find security vulnerabilities.

JavaScriptnpmMIT Licensenuclei-templatesnuclei
github.com/projectdiscovery/nuclei
12.7k3.6k
nahamsec/Resources-for-Beginner-Bug-Bounty-Hunters

A list of resources for those interested in getting started in bug bounties

bug-bounty-huntershackers
12.1k2.1k
dstotijn/hetty

An HTTP toolkit for security research.

GoGo ModulesMIT Licensemitmproxy
hetty.xyz
11.9k770
edoardottt/awesome-hacker-search-engines

A curated list of awesome search engines useful during Penetration testing, Vulnerability assessments, Red/Blue Team operations, Bug Bounty and more

ShellMIT Licenseawesomeawesome-list
awesome-hacker-search-engines.com
10.9k1k
blacklanternsecurity/bbot

The recursive internet scanner for hackers. 🧡

PythonPyPIGNU Affero General Public License v3.0hackingneo4j
blacklanternsecurity.com/bbot/
10.2k886
projectdiscovery/httpx

httpx is a fast and multi-purpose HTTP toolkit that allows running multiple probes using the retryablehttp library.

GoGo ModulesMIT Licensehttpbugbounty
docs.projectdiscovery.io/tools/httpx
10.2k1.1k
shmilylty/OneForAll

OneForAll是一款功能强大的子域收集工具

PythonPyPIGNU General Public License v3.0subdomainsubdomain-scanner
9.9k1.4k
OWASP/wstg

The Web Security Testing Guide is a comprehensive Open Source guide to testing the security of web applications and web services.

Creative Commons Attribution Share Alike 4.0 Internationalbest-practicesguide
owasp.org/www-project-web-security-testing-guide/
9.6k1.6k
yogeshojha/rengine

reNgine is an automated reconnaissance framework for web applications with a focus on highly configurable streamlined recon process via Engines, recon data correlation and organization, continuous monitoring, backed by a database, and simple yet intuitive User Interface. reNgine makes it easy for penetration testers to gather reconnaissance with minimal configuration and with the help of reNgine's correlation, it just makes recon effortless.

HTMLGNU General Public License v3.0security-toolsosint
yogeshojha.github.io/rengine/
8.7k1.3k