
مسح النطاق الفرعي Knock
✅ سريع وغير متزامن • 🔐 استطلاع + قوة عمياء • 🔧 سهل التوسيع
KnockPy هي أداة موديولية بلغة Python 3 لتعداد النطاقات الفرعية عبر الاستطلاع السلبي والقوة العمياء، الآن مع دعم async/await، وأداء محسن، ومعالجة حديثة لـ HTTP/TLS.
httpx وحل DNS--verbose (DNS/TCP/TLS/سلاسل إعادة التوجيه/أخطاء الطلب + فحوصات أمنية)show/delete/export/search)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 أعلى = مسح أسرع، ولكن حمل أكبر على وحدة المعالجة/الشبكة/DNS وزيادة خطر حدود المعدل البعيدtimeout أقل = مسح أسرع، ولكن خطر أكبر لفقدان أهداف بطيئة ولكن صالحة (سلبيات كاذبة)الملفات الشخصية الموصى بها:
--threads 50 --timeout 5--threads 150 --timeout 4--threads 250 --timeout 3إذا كنت بحاجة إلى السرعة والاكتمال على قوائم كبيرة جدًا، استخدم استراتيجية المرورين:
--threads 250 --timeout 3--threads 80 --timeout 5 (أو أعلى)ملاحظات:
--setup) تتجاوز القيم الافتراضية المضمنةthreads=250, timeout=3knockpy -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
كل خدمة تدعم:
name (الاسم)enabled (true/false) (مفعل)parser (المحلل)url_template (يدعم {domain}، {virustotal_key}، {shodan_key})requires_api (virustotal أو shodan، اختياري)المحللون المدعومون:
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 show (عرض)2 delete (حذف)3 export (تصدير)4 search (بحث)0 reset db (إعادة تعيين قاعدة البيانات) (يطلب تأكيدًا صريحًا)الخروج من وضع التقرير:
Enter عند موجه الإجراء الفارغCTRL+Cknockpy -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)
| العلم | الوصف |
|---|
-d, --domain | النطاق المستهدف (أو stdin إذا استخدم بدون قيمة) |
-f, --file | ملف بقائمة النطاقات |
--recon | تمكين الاستطلاع السلبي |
--bruteforce, --brute | تمكين القوة العمياء باستخدام قائمة الكلمات |
--exclude TYPE VALUE | استبعاد المطابقات (status, length/lenght, body) |
--verbose | تشخيصات عميقة لمسح النطاق الواحد فقط |
--wildcard | اختبار DNS البدل والخروج |
--test | مع --recon، اختبار كل مصدر استطلاع (فاشل/فارغ/بيانات) |
--setup | الإعداد التفاعلي (القيم الافتراضية لوقت التشغيل + مفاتيح API في قاعدة البيانات) |
--update-versions | تحديث كتالوج إصدارات خوادم الويب المحلي الأحدث |
--report [ID|latest|list] | وضع التقرير (عرض/حذف/تصدير/بحث/إعادة تعيين قاعدة البيانات، تصدير HTML) |
--check-update | التحقق عبر الإنترنت إذا كان هناك إصدار أحدث من Knockpy على PyPI |
--wordlist | تجاوز وقت التشغيل لقائمة الكلمات |
--dns | تجاوز وقت التشغيل لمحلل DNS |
--useragent | تجاوز وقت التشغيل لوكيل مستخدم HTTP |
--timeout | تجاوز وقت التشغيل للمهلة (بالثواني) |
--threads | تجاوز وقت التشغيل لعدد العمال المتزامنين |
--silent | إخفاء شريط التقدم |
--json | إخراج JSON فقط (يفرض --silent) |
--status | طباعة حالة وقت التشغيل والمتابعة |
-h, --help | عرض رسالة المساعدة |