HTTP Breakout Proxy
وكيل اعتراض HTTP/HTTPS خفيف الوزن وأداة تحليل حركة المرور مكتوبة بلغة Go، مع واجهة مستخدم ويب لفحص وتصفية وتلوين وتعليق حركة المرور الملتقطة في الوقت الفعلي.


نظرة عامة
HTTP Breakout Proxy يعمل كوكيل MITM لـ HTTP و HTTPS وأداة تصور حية.
يلتقط الطلبات والاستجابات بين مكونين برمجيين، مما يسمح للمطورين بـ:
- فحص الرؤوس والمحتوى وتفاصيل التوقيت لكل طلب واستجابة.
- تنظيم البيانات الملتقطة وتصفيتها وحفظها.
- إبراز الطلبات بناءً على قواعد الألوان المحددة من قبل المستخدم.
- إيقاف أو استئناف الالتقاط ديناميكيًا.
- عرض توقيت الطلب كـ مخطط جانت لتصور مراحل الأداء.
يحتوي الوكيل على واجهة مستخدم متكاملة يمكن الوصول إليها من أي متصفح ويب حديث، مما يتيح تحليلًا فوريًا دون أدوات خارجية.
الميزات
🔍 الالتقاط والفحص
- يعترض حركة المرور HTTP و HTTPS (مع دعم MITM CA).
- يعرض جميع بيانات الطلب والاستجابة الوصفية والرؤوس والمحتوى.
- يدعم الاقتطاع للمحتويات الكبيرة جدًا.
💾 الحفظ الدائم
- يتم تخزين الالتقاطات وقواعد الألوان في ملف
captures.json (أو ملف محدد).
- يتم إعادة تحميل الحالة تلقائيًا عند بدء التشغيل وحفظها دوريًا على القرص.
- يتم إنشاء قواعد الألوان الافتراضية عند التشغيل الأول إذا لم تكن موجودة.
🖥️ واجهة الويب
- واجهة ويب مضمنة وسريعة الاستجابة (يتم تقديمها بواسطة الوكيل نفسه).
- يعرض الالتقاطات في قائمة قابلة للتمرير مع مؤشرات ملونة.
- لوحة التفاصيل تظهر:
- رؤوس ومحتوى الطلب والاستجابة
- تفصيل التوقيتات
- ملاحظات قابلة للتحرير
- مخطط أداء بنمط جانت لمراحل الاتصال
🎨 قواعد الألوان
- تعريف إبرازات لونية مشروطة للالتقاطات باستخدام صيغة تصفية مرنة:
- مثال:
status:4 status:5 → يبرز أخطاء HTTP
- مثال:
url:/api/ → يبرز طلبات API
- مثال:
/\.css$/ → تطابق تعبير منتظم على URL
- تتضمن كل قاعدة:
- الاسم، اللون، تعبير المطابقة، الأولوية، والملاحظة
- الفوز لأعلى أولوية مطابقة.
- يتم إدارتها بشكل تفاعلي من خلال واجهة نموذج معدّة مع معاينات حية.
- يتم حفظها عبر الجلسات.
⏸️ التحكم في الالتقاط
- زر إيقاف مؤقت/استئناف يسمح لك بإيقاف جمع الالتقاطات الجديدة دون إيقاف الوكيل.
- مفيد عند التركيز على مجموعة بيانات ثابتة أو عزل سلوك معين.
📈 تصور الأداء
- يتضمن كل التقاط توقيت اتصال مفصل:
- بحث DNS
- اتصال TCP
- مصافحة TLS
- معالجة الخادم
- قراءة الاستجابة
- يُعرض كمخطط جانت في لوحة التفاصيل.
- يتم تقريب المقياس تلقائيًا إلى أقرب ثانية للوضوح.
🧭 التصفية والبحث
- مربع تصفية في الوقت الفعلي يدعم:
- عوامل تصفية تعتمد على الحقول (
method:GET, status:404, header:Content-Type=application/json)
- تعابير منتظمة (
/login/)
- مصطلحات مجمعة بدلالات AND/OR
- دعم المطابقة غير الحساسة لحالة الأحرف والمطابقة الجزئية.
- تطبق التصفية على قائمة الالتقاطات وكذلك الإبراز اللوني.
- يتم تخزين سجل البحث محليًا في المتصفح.
🧹 الإدارة
- حذف الالتقاطات الفردية أو مسح جميع الالتقاطات عبر الواجهة.
- يتم حفظ القواعد والملاحظات مع الالتقاطات.
🧩 أدوات التصدير
- نسخ الالتقاط كـ:
- أمر
curl (منسق للطرفية)
- مقتطف كود
python requests (تمثيل JSON نظيف)
- تنزيل محتوى الاستجابة مباشرة من الواجهة.
استخدام سطر الأوامر
httpbreakout -l 127.0.0.1:8080
بدء سريع
البناء (من المصدر)
git clone https://github.com/jbsouthe/http-breakout-proxy.git
cd http-breakout-proxy
go build -o http-breakout-proxy
ينتج عن ذلك ملف تنفيذي واحد يحتوي على الوكيل المترجم وأصول واجهة المستخدم المضمنة.
التشغيل (الافتراضي)
# تشغيل بالإعدادات الافتراضية (وكيل + واجهة)
./http-breakout-proxy
افتراضيًا، يرتبط الملف التنفيذي بـ 127.0.0.1:8080 للوكيل (واختياريًا للواجهة — راجع أعلام CLI). افتح الواجهة في متصفح لفحص الالتقاطات.
مثال: استخدام الوكيل مع curl
# إرسال طلب HTTPS عبر الوكيل (الوكيل يستمع على 127.0.0.1:8080)
curl -x http://127.0.0.1:8080 https://example.com
ستظهر حركة المرور الملتقطة في واجهة الويب.
وسائط سطر الأوامر
| العلم | الافتراضي | الوصف |
|---|
-l | 127.0.0.1:8080 | عنوان يستمع عليه الوكيل بالإضافة إلى تطبيق الواجهة. |
-mitm | true | تمكين وضع اعتراض HTTPS Man In The Middle (MITM) (يقوم بإنشاء شهادة محلية لاعتراض TLS). |
-ca | ./ca | الدليل الذي يتم فيه تخزين شهادة CA والمفتاح المولّدين عند تمكين MITM واختيار الحفظ. |
-f | ./captures.json | المسار أو الدليل الاختياري لحفظ الالتقاطات على القرص (مثل ./captures.json). |
-max-body | 1048576 | الحد الأقصى لعدد البايتات (لكل محتوى) للتخزين/العرض؛ يتم اقتطاع المحتويات الأكبر مع مؤشر. |
-buffer-size | 1000 | سعة المخزن المؤقت الدائري للالتقاطات في الذاكرة. |
-v | false | تمكين التسجيل المفصل لتصحيح الأخطاء. |
استخدم ./http-breakout-proxy -h لعرض الأعلام المتاحة وأوصاف الاستخدام.
نظرة عامة على واجهة الويب
تم تحسين الواجهة لسير العمل التحقيقي.
- شريط الأدوات العلوي: إدخال التصفية العالمية (يدعم التعبيرات المنتظمة والبادئات المفتاحية)، إيقاف مؤقت/استئناف الالتقاط، مسح، ومساعدة التصفية (تفتح في علامة تبويب جديدة).
- اللوحة اليسرى: قائمة زمنية للالتقاطات (الأحدث أولاً). يعرض كل عنصر اسم الالتقاط؛ افتراضيًا هو
METHOD URL [STATUS] ولكن يمكن تعيين اسم مخصص.
- اللوحة اليمنى: تفاصيل الالتقاط المحدد:
- نظرة عامة: بيانات وصفية ورؤوس ومحتويات (JSON منسق عند الإمكان).
- علامات تبويب الطلب/الاستجابة: محتويات خام منسقة.
- علامة التبويب الخام: JSON كامل للالتقاط.
- إجراءات الصف: نسخ كـ
curl، نسخ كـ Python requests، تنزيل محتوى الاستجابة، إعادة تسمية، حذف.
لغة التصفية (مرجع قصير)
- رمز عادي: يطابق في أي مكان (الطريقة، URL، الحالة، المضيف، الرؤوس، المحتويات).
- البادئات:
method:، status:، host:، url:، body:، req.body:، resp.body:، header:، req.header:، resp.header:.
- صيغة التعبير المنتظم:
/pattern/flags (على سبيل المثال /bearer\\s+\\S+/i).
- مواصفات الرأس:
header:name=value حيث يمكن أن يكون name أو value تعبيرات منتظمة.
- يتم دمج المصطلحات باستخدام AND المنطقي افتراضيًا (مفصولة بمسافات). قم بالتبديل إلى OR إذا رغبت بتعديل منطق العميل.
أمثلة:
method:POST status:2 host:api.example.com
/token\\s*[:=]\\s*\\S+/i
req.header:authorization=/bearer/i
body:/\\"success\\"\\s*:\\s*true/i
اعتراض HTTPS (MITM)
عند تمكين وضع Man In The Middle:
- يقوم الوكيل بإنشاء زوج مفاتيح RSA CA وشهادة جذر ويخزنهما في
-ca (افتراضي ./ca).
- لفحص حركة HTTPS، يجب إضافة شهادة CA المولدة (
ca.pem أو ما شابه) إلى مخزن الثقة الخاص بالعميل (أو النظام) الذي يصدر الطلبات. يتطلب هذا غالبًا صلاحيات إدارية على العديد من المنصات.
- يقوم الوكيل باعتراض TLS عن طريق إصدار شهادات فرعية موقعة من قبل CA المحلية لكل اسم مضيف يطلبه العميل.
ملاحظة أمنية: قم بتثبيت CA فقط في البيئات الخاضعة للتحكم. لا تثق في هذه CA في الأنظمة التي تقرأ فيها حركة مرور غير ذات صلة وحساسة.
الحفظ الدائم
إذا تم تمكين الحفظ (عبر -f أو مسار مهيأ):
- تتم كتابة الالتقاطات دوريًا على القرص (مثل
captures.json).
- عند بدء التشغيل، سيحاول التطبيق تحميل الالتقاطات السابقة من ملف الحفظ إلى المخزن المؤقت في الذاكرة (مع الحفاظ على الترتيب).
- يتم مزامنة إعادة التسمية والحذف إلى المخزن المحفوظ عند عمليات الحفظ؛ ضع في اعتبارك استدعاء تفريغ فوري للعمليات الحرجة.
تنسيق التخزين
يتم تسلسل العناصر الملتقطة إلى JSON وتحتوي على الحقول التالية (غير شاملة):