
نص برمجي لاستنزاف DHCP مكتوب بلغة بايثون باستخدام مكتبة الشبكة scapy
تحقق تحصين DHCP للقبعات البيضاء: استنزف تجمّع العناوين، واختطف عقود إيجار الجيران، وأخرج المضيفين من عناوينهم عبر ARP مُزيّف، وتبيّن ما إذا كانت الشبكة أوقفتك. يتطلب صلاحيات الجذر و Python 3.11+.
Debian / Kali: حمّل أحدث .deb من
Releases وثبّته —
يضع dhcpig وdhcpig-web في PATH، دون الحاجة إلى بيئة افتراضية:
curl -LO https://github.com/kamorin/DHCPig/releases/download/v2.7.2/dhcpig_2.7.2-1_all.deb
sudo apt install ./dhcpig_2.7.2-1_all.deb
sudo dhcpig-web --open
تثبيت عام (أي لينكس، Python 3.11+، دون بيئة افتراضية):
git clone https://github.com/kamorin/DHCPig && cd DHCPig
sudo pip install --break-system-packages .
sudo dhcpig-web --open
يثبّت مباشرة في Python النظام بصلاحيات الجذر، لذلك يجد sudo dhcpig-web الأمر
دون عناء مسارات .venv/bin/. يتجاوز --break-system-packages حارس PEP 668 في دبيان/كالي
الذي يمنع pip من لمس حزم النظام — هذا الحارس موجود لحماية الحزم التي يديرها apt، لا
لأن هذا التثبيت غير اعتيادي؛ فملف .deb أو بيئة افتراضية يلغي الحاجة إليه أصلًا.
من المصدر (أي لينكس، Python 3.11+):
git clone https://github.com/kamorin/DHCPig && cd DHCPig
python3 -m venv .venv && .venv/bin/pip install -e .
sudo .venv/bin/dhcpig-web --open
افتح عنوان http://127.0.0.1:8787/?token=... المعروض. ثلاث ملاحظات مهمة:
.venv/bin/
— فـsudo يعيد تعيين PATH.?token= إلزامي. بدونه ستحصل على أخطاء 401 وصفحة فارغة.ssh -L 8787:127.0.0.1:8787 user@<vm-ip>. وأسقط --open.على دبيان/كالي، نفّذ sudo apt install -y python3-venv أولًا إذا فشلت خطوة البيئة الافتراضية.
sudo .venv/bin/dhcpig exhaust eth0 --report run.json
sudo .venv/bin/dhcpig release eth0 --scope 192.168.4.0/22 # DESTRUCTIVE
sudo .venv/bin/dhcpig active-scan eth0 --scope 192.168.4.0/22 # read-only
sudo .venv/bin/dhcpig release-previous eth0 # undo a previous run
dhcpig ifaces
-v0 يعرض النتائج فقط؛ -v3 يضيف تصحيحًا على مستوى الحزم. المرجع الكامل للأعلام: man dhcpig
(أو packaging/dhcpig.1 قبل التثبيت).
استنزاف DHCP (exhaust) — تدميري
تحرير عملاء DHCP النشطين (release) — تدميري
ما بعد الاستنزاف / إعادة الضبط (release-previous) — استرداد
--max-age يُسقط الإدخالات القديمةالعثور على الجيران (active-scan) — للقراءة فقط
فحص سلبي (scan) — للقراءة فقط، عبر واجهة الأوامر فقط
كل شيء يصل إلى سجل الأحداث، والأخطر أولًا: النتائج، ثم سطر لكل مضيف، ثم ملخص
OUTCOME. مستوى الإسهاب Verbosity 0 (الويب) أو -v0 (واجهة الأوامر) يخفي حركة الحزم. تصدير JSON
هو السجل الكامل — بينما السجل المعروض مجرد ملخص.
تبقى عقود الإيجار محفوظة بعد التشغيل حتى يمكن التحقق من حالة الاستنزاف. لتحريرها:
sudo .venv/bin/dhcpig restore eth0 # same process still running
sudo .venv/bin/dhcpig release-previous eth0 # any time later, from the lease journal
يسجّل السجل ($XDG_STATE_HOME/dhcpig/leases-<iface>.jsonl) لكل عقد إيجار مُتَّخذ: MAC وIP والخادم والطابع الزمني — بيانات المهمة. احذفه عندما تنتهي.
شغّل هذه الأداة فقط على شبكات تملكها أو لديك إذن صريح لاختبارها. release وexhaust يعطّلان العملاء النشطين عن عمد؛ --scope اختياري وافتراضيًا يشمل القطاع بأكمله. المؤلفون ليسوا مسؤولين عن إساءة الاستخدام.
ملاحظات التصميم والدواخل: docs/DESIGN.md. المساهمة: CONTRIBUTING.md.
الترخيص: GPL v2 أو أحدث.
| الخيار |
|---|
--dry-run | استطلاع فقط: جولة ARP ومعاملات تحكم تُنفَّذ فعلًا، ولا يُرسَل أي شيء مُغيّر |
--scope CIDR | يحدد الأهداف (قابل للتكرار)؛ الافتراضي شبكة الواجهة نفسها |
--rate N | حزمة في الثانية، الافتراضي 7 — غير متاح في exhaust، لأنه يضبط وتيرته ذاتيًا |
--no-evict | تخطَّ مرحلة تعارض ARP |
--report FILE | يكتب تقرير الجلسة إلى FILE عند انتهاء التشغيل؛ الصيغة تتبع امتداد FILE (.json/.csv/.html، الافتراضي JSON) |
--client-mac MAC | خاص بـexhaust فقط؛ استخدم عنوان MAC هذا بدل عنوان عشوائي (قابل للتكرار — يتنقل عبر القائمة) |
--request-option SPEC | خاص بـexhaust/active-scan؛ محتوى خيار DHCP 55 (قائمة طلب المعاملات) لإرساله، مثال 12,14-19,23 (الافتراضي: ملف macOS المدمج) |
--no-spoof-eth-src | خاص بـexhaust فقط؛ استخدم عنوان MAC الحقيقي لكارت الشبكة كمصدر Ethernet لكل إطار (Wi-Fi؛ نقاط الوصول تُسقط الإطارات التي لا يكون مصدرها MAC المحطة المرتبطة) |