
Knock 서브도메인 스캔
✅ 빠르고 비동기 • 🔐 정찰 + 무차별 • 🔧 확장하기 쉬움
KnockPy는 수동 정찰 및 무차별 대입을 통해 서브도메인을 열거하는 모듈식 Python 3 도구로, 이제 async/await 지원, 향상된 성능 및 최신 HTTP/TLS 처리를 갖추고 있습니다.
httpx 및 DNS 해석을 사용한 비동기 스캔--verbose 단일 도메인 진단 (DNS/TCP/TLS/리디렉션 체인/요청 오류 + 보안 검사)show/delete/export/search)가 있는 SQLite 보고서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 .
⚠️ 권장 Python 버전: 3.9+
코드베이스는 책임별로 구성되어 있으며, 하위 호환성을 위한 안정적인 퍼사드를 제공합니다.
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
호환성 참고:
import knockpy 또는 from knockpy import KNOCKPY.engine/, cli_parts/, storage_parts/로 분할됩니다.GitHub에 안정 버전이 출시된 후에만
pip install knock-subdomains
knockpy -d domain.com [options]
--threads 및 --timeout이 두 옵션은 대규모 스캔의 실행 시간에 가장 큰 영향을 미칩니다.
--threads는 동시성을 제어합니다 (병렬로 처리되는 대상 수)--timeout은 각 네트워크 단계가 포기하기 전에 대기하는 시간을 제어합니다절충점:
threads = 스캔 속도는 빠르지만 CPU/네트워크/DNS 부하 증가 및 원격 속도 제한 위험 증가timeout = 스캔 속도는 빠르지만 느리지만 유효한 대상을 놓칠 위험 증가 (위음성)권장 프로필:
--threads 50 --timeout 5--threads 150 --timeout 4--threads 250 --timeout 3부터 시작매우 큰 목록에서 속도와 완전성을 모두 필요로 하는 경우 2패스 전략을 사용하십시오:
--threads 250 --timeout 3--threads 80 --timeout 5 (또는 그 이상)참고:
--setup)은 내장 기본값을 재정의합니다threads=250, timeout=3입니다knockpy -d example.com --recon --bruteforce
knockpy -d example.com --recon --test
knockpy --update-versions
knockpy --check-update
첫 실행 시 KnockPy가 다음을 생성합니다:
~/.knockpy/recon_services.json
services 배열을 편집하여 소스를 추가/비활성화할 수 있습니다.
코드를 변경하지 않고 사용자 정의 파일 경로를 지정할 수도 있습니다:
export KNOCK_RECON_SERVICES=/path/to/recon_services.json
각 서비스는 다음을 지원합니다:
nameenabled (true/false)parserurl_template (supports {domain}, {virustotal_key}, {shodan_key})requires_api (virustotal or shodan, optional)지원되는 파서:
csv_first_columnrapiddns_html_tdjson_listvirustotal_subdomainsshodan_subdomainsecho "example.com" | knockpy -d
export API_KEY_VIRUSTOTAL=your-virustotal-api-key
export API_KEY_SHODAN=your-shodan-api-key
.env 파일을 사용할 수 있습니다:
API_KEY_VIRUSTOTAL=your-virustotal-api-key
API_KEY_SHODAN=your-shodan-api-key
knockpy -d example.com --recon --bruteforce
knockpy --report list
knockpy --report latest
knockpy --report
대화식 보고서 메뉴:
1 show2 delete3 export4 search0 reset db (명시적 확인 요청)보고서 모드 종료:
Enter 누르기CTRL+C 누르기knockpy -d forum.example.com --verbose
knockpy -d example.com --wildcard
KnockPy는 Python 모듈로 사용할 수 있습니다:
import knockpy
result = knockpy.KNOCKPY("example.com", timeout=5.0, threads=20)
print(result["domain"], result["ip"])
또는:
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'])
기본 워드리스트는 knockpy/wordlist/wordlist.txt에 포함되어 있습니다.
--wordlist로 자신의 워드리스트를 제공할 수 있습니다.
python3 -m pytest
# (optional) smoke-run example script
python3 examples/poc.py
GPLv3 라이선스에 따라 라이선스가 부여됩니다.
Gianni Amato (@guelfoweb)
| Flag | Description |
|---|
-d, --domain | 대상 도메인 (값 없이 사용 시 표준 입력) |
-f, --file | 도메인 목록이 포함된 파일 |
--recon | 수동 정찰 활성화 |
--bruteforce, --brute | 워드리스트를 사용한 무차별 대입 활성화 |
--exclude TYPE VALUE | 일치 항목 제외 (status, length/lenght, body) |
--verbose | 단일 도메인 스캔에 대한 심층 진단 |
--wildcard | 와일드카드 DNS 테스트 후 종료 |
--test | --recon과 함께 사용 시 각 정찰 소스 테스트 (실패/빈/데이터) |
--setup | 대화식 설정 (런타임 기본값 + DB에 API 키) |
--update-versions | 로컬 최신 웹 서버 버전 카탈로그 업데이트 |
--report [ID|latest|list] | 보고서 모드 (대화식 show/delete/export/search/reset db, HTML 내보내기) |
--check-update | PyPI에서 최신 Knockpy 릴리스가 있는지 온라인 확인 |
--wordlist | 워드리스트에 대한 런타임 재정의 |
--dns | DNS 리졸버에 대한 런타임 재정의 |
--useragent | HTTP 사용자 에이전트에 대한 런타임 재정의 |
--timeout | 타임아웃에 대한 런타임 재정의 (초) |
--threads | 동시 작업자 수에 대한 런타임 재정의 |
--silent | 진행률 표시줄 숨기기 |
--json | JSON 전용 출력 (--silent 강제) |
--status | 런타임 상태 출력 후 계속 |
-h, --help | 도움말 메시지 표시 |