
DHCPig v2.7.2
نص برمجي لاستنزاف DHCP مكتوب بلغة بايثون باستخدام مكتبة الشبكة scapy
DHCPig
تحقق تحصين 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 وصفحة فارغة.- جهاز بلا شاشة؟ يربط التطبيق نفسه بحلقة loopback عن قصد. مرّر المنفذ، لا تعِد الربط:
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
| الخيار | |
|---|---|
--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 المحطة المرتبطة) |
-v0 يعرض النتائج فقط؛ -v3 يضيف تصحيحًا على مستوى الحزم. المرجع الكامل للأعلام: man dhcpig
(أو packaging/dhcpig.1 قبل التثبيت).
ماذا يفعل كل وضع
استنزاف DHCP (exhaust) — تدميري
- يعدّ جرد القطاع عبر ARP، ثم يثبت أن DHCP يعمل من هذا الجهاز ولعنوان MAC غير معروف
- يرسل DHCPRELEASE لعقد إيجار كل جار — فالبروتوكول لا يتطلب إثبات ملكية
- يغمر الخادم بطلبات DISCOVER/REQUEST من عناوين MAC مزيّفة حتى يتوقف الخادم عن الاستجابة
- يعيد طلب العناوين المُحرَّرة بالاسم (خيار 50) بعد استنزاف التجمّع
- يزيّف تعارضات ARP وفق RFC 5227 ضد ما أخذه، ليرى ما إذا كانت المضيفات تتخلى عن العنوان
- النتيجة: هل يمكن لعميل جديد كليًا الحصول على عنوان بعد ذلك؟
تحرير عملاء DHCP النشطين (release) — تدميري
- السلسلة نفسها دون الإغراق: جرد ← تحرير ← إعادة طلب بالاسم ← تعارض ARP
- يستهدف الأجهزة المتصلة الآن؛ يترك التجمّع سليمًا حتى تتمكن معظمها من إعادة الحصول
- النتيجة: هل فقد أي مضيف عنوانه وفشل في الحصول على جديد؟
ما بعد الاستنزاف / إعادة الضبط (release-previous) — استرداد
- يعيد تشغيل سجل عقود الإيجار على القرص ويعيد كل عنوان أخذه هذا الأداة
- مُصفّى لهذه الواجهة والشبكة وخادم DHCP؛
--max-ageيُسقط الإدخالات القديمة - يسجّل ما إذا كان التجمّع مستنزفًا مسبقًا، لكنه يحرر عقود الإيجار المسجلة في كل الأحوال
- النتيجة: هل التجمّع قابل للاستخدام مجددًا؟
العثور على الجيران (active-scan) — للقراءة فقط
- يمسح نطاق العناوين عبر ARP، ويرسل DHCPINFORM واحدًا لبصمة خوادم DHCP
- لا يأخذ أي عنوان ولا يزعج أي عقد إيجار
فحص سلبي (scan) — للقراءة فقط، عبر واجهة الأوامر فقط
- يراقب DHCP وARP؛ يبصم المضيفات بترتيب خيار 55، ويعتمد على بائع MAC كبديل
- لا يرسل شيئًا. يعمل حتى يُوقف
قراءة تشغيل
كل شيء يصل إلى سجل الأحداث، والأخطر أولًا: النتائج، ثم سطر لكل مضيف، ثم ملخص
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 أو أحدث.