العودة إلى التحديثات
New releaseAug 2, 2026

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 أو أحدث.

الفئات