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


HTTP Breakout Proxy يعمل كوكيل MITM لـ HTTP و HTTPS وأداة تصور حية.
يلتقط الطلبات والاستجابات بين مكونين برمجيين، مما يسمح للمطورين بـ:
يحتوي الوكيل على واجهة مستخدم متكاملة يمكن الوصول إليها من أي متصفح ويب حديث، مما يتيح تحليلًا فوريًا دون أدوات خارجية.
captures.json (أو ملف محدد).status:4 status:5 → يبرز أخطاء HTTPurl:/api/ → يبرز طلبات API/\.css$/ → تطابق تعبير منتظم على URLmethod:GET, status:404, header:Content-Type=application/json)/login/)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). افتح الواجهة في متصفح لفحص الالتقاطات.
# إرسال طلب 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] ولكن يمكن تعيين اسم مخصص.curl، نسخ كـ Python requests، تنزيل محتوى الاستجابة، إعادة تسمية، حذف.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 تعبيرات منتظمة.أمثلة:
method:POST status:2 host:api.example.com/token\\s*[:=]\\s*\\S+/ireq.header:authorization=/bearer/ibody:/\\"success\\"\\s*:\\s*true/iعند تمكين وضع Man In The Middle:
-ca (افتراضي ./ca).ca.pem أو ما شابه) إلى مخزن الثقة الخاص بالعميل (أو النظام) الذي يصدر الطلبات. يتطلب هذا غالبًا صلاحيات إدارية على العديد من المنصات.ملاحظة أمنية: قم بتثبيت CA فقط في البيئات الخاضعة للتحكم. لا تثق في هذه CA في الأنظمة التي تقرأ فيها حركة مرور غير ذات صلة وحساسة.
إذا تم تمكين الحفظ (عبر -f أو مسار مهيأ):
captures.json).يتم تسلسل العناصر الملتقطة إلى JSON وتحتوي على الحقول التالية (غير شاملة):
id — معرف تسلسلي فريدtime — طابع زمني (ISO 8601)method، urlrequest_headers، response_headersrequest_body، response_body — يتم اقتطاعها إلى -max-body إذا لزم الأمرresponse_status، duration_msname — تسمية مستخدم اختياريةnotes، deleted — بيانات وصفية للتحكم في أحداث SSE وحالة الواجهةcurl آمن للصدفة بما في ذلك الرؤوس والمحتوى (يحذف رؤوس hop-by-hop).requests صغير مع url و headers و data اختياري.Content-Type عند الإمكان.اعتبارات التصميم:
Host، Content-Length، Connection) من أوامر إعادة التشغيل المولدة.GET /api/captures — سرد الالتقاطات (مصفوفة JSON).DELETE /api/captures — مسح جميع الالتقاطات.GET /api/captures/{id} — استرجاع التقاط واحد.DELETE /api/captures/{id} — حذف التقاط معين.PATCH /api/captures/{id} — تحديث بيانات وصفية للالتقاط؛ مثال على المحتوى: { "name": "My label" }.GET /api/pause — يعيد { "paused": true|false }.POST /api/pause — تعيين حالة الإيقاف المؤقت؛ مثال على المحتوى: { "paused": true }.GET /events — تدفق أحداث الخادم (SSE) لإشعارات الالتقاط الحية وأحداث التحكم.//go:embed ui/* و fs.Sub لتقديم الملفات الثابتة. ينتج عن ذلك قطعة أثرية واحدة قابلة للنشر.Content-Encoding ويحاول فك ضغط المحتويات gzip و deflate قبل العرض. يتم الاحتفاظ بالبايتات الأصلية لشفافية الوكيل.io.LimitReader لكشف الاقتطاع وحماية استخدام الذاكرة.نموذج التوزيع الموصى به:
CGO_ENABLED=0، -trimpath، -ldflags "-s -w")..tar.gz لأنظمة Unix، .zip لنظام Windows) وتضمين README.md و LICENSE.goreleaser لأتمتة البناء عبر المنصات والقطع الأثرية للإصدار.أمثلة لأوامر البناء:
# Linux x86_64
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o dist/http-breakout-proxy-linux-amd64 .
# macOS (arm64)
GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o dist/http-breakout-proxy-darwin-arm64 .
[Unit]
Description=HTTP Breakout Proxy
After=network.target
[Service]
ExecStart=/opt/http-breakout-proxy/http-breakout-proxy -l 0.0.0.0:8080
Restart=on-failure
User=proxy
Group=proxy
[Install]
WantedBy=multi-user.target
أنشئ plist في ~/Library/LaunchAgents وقم بتحميله باستخدام launchctl.
يظهر محتوى ملتقط كبيانات ثنائية غير مفهومة
المحتوى مضغوط (مثل gzip). تأكد من تشغيل إصدار يتضمن فك الضغط التلقائي؛ تعرض الواجهة JSON/نصًا مفكوك الضغط عند الإمكان.
حركة HTTPS غير معروضة / أخطاء اتصال
العميل لا يثق في CA المولدة. قم بتثبيت ca/ca.pem في مخزن الثقة الخاص بالعميل/النظام ووضع علامة عليه كموثوق لاعتراض TLS.
الواجهة تظهر تحديدًا قديمًا بعد مسح الالتقاطات
قم بالترقية إلى عميل يمسح selectedId عند أحداث cleared SSE أو استدع نقطة النهاية GET /api/captures لتحديث الحالة.
خطأ 405 على DELETE /api/captures
تأكد من أن معالج الخادم يقبل DELETE لـ /api/captures وأنك لا تصادف عدم تطابق في الشرطة المائلة.
تقوم هذه الأداة باعتراض TLS عند تمكين MITM. استخدمها فقط في البيئات الخاضعة للتحكم حيث لديك إذن صريح لفحص حركة المرور. CA المولدة قوية: تعامل مع مفتاحها الخاص بنفس سرية أي مفتاح خاص لـ CA جذر. لا تقم بتثبيت CA في مخازن الثقة المشتركة أو الإنتاج.
المساهمات مرحب بها. يرجى فتح مشكلات للأخطاء أو طلبات الميزات. للمساهمات البرمجية:
هذا المشروع موزع بموجب رخصة MIT. راجع LICENSE للتفاصيل.
المؤلف: John Southerland (GitHub: jbsouthe)
المشروع: http-breakout-proxy — مخصص لتصحيح الأخطاء والتطوير وتعلم سلوك HTTP.