التقاط كود Claude باستخدام `mitmproxy` — دليل خطوة بخطوة (مع إضافات جاهزة للتشغيل ونصوص تحليل)
٢٢ سبتمبر ٢٠٢٥
هل ترغب في رؤية ما يرسله Claude Code فعليًا إلى Anthropic؟ هذا المنشور يرشدك عبر سير عمل عملي وقابل للتكرار لاعتراض وحفظ وتحليل حركة مرور Claude Code باستخدام mitmproxy. ستحصل على:
- إعداد خطوة بخطوة لتحويل Claude Code عبر
mitmproxy. - إضافة جاهزة للتشغيل تستخرج التحذيرات النظامية المخفية (قواعد "المهم: ...").
- إضافة متكاملة تلتقط الطلبات + الردود (التحذيرات النظامية، تعريفات الأدوات، رسائل المستخدم، والردود المتدفقة/الجزئية) في سجلات موقعة بطابع زمني.
- أدوات تحليل صغيرة لاستخراج التحذيرات النظامية وربط الطلبات بالردود في تنسيق JSON لإعادة التشغيل أو التحليل.
- تحذيرات أمنية وخصوصية وقانونية.
ملخص سريع: شغّل mitmproxy في الوضع العكسي، وضبط
ANTHROPIC_BASE_URL=http://localhost:8000، ووثّق شهادة mitm CA أثناء الاختبار، ثم شغّل Claude Code — وستحفظ لك الإضافات أدناه الحمولات.
السلامة & الأخلاقيات (اقرأ أولاً)
- لا تعترض حركة المرور إلا إذا كنت مالكها أو مصرحًا لك صراحةً بالتحقق منها. اعتراض حركة مرور المستخدمين الآخرين غير قانوني/غير أخلاقي.
- ستحتوي السجلات الملتقطة على API مفاتيح ورموز وأسرار. عاملها كبيانات حساسة. قم بحذفها قبل المشاركة.
- بعد الاختبار، أزل شهادة mitmproxy CA من مخزن الثقة الخاص بنظامك. لا تثق بها بشكل دائم.
- إذا كان العميل يستخدم TLS pinning، فسيتم حظرك — لا تحاول تجاوز التثبيت لأنظمة لا تملكها.
المتطلبات المسبقة
- macOS أو Linux (التعليمات مقدمة لـ macOS؛ Linux مشابه).
- Python 3.8+ (لإضافة mitmproxy).
- Homebrew (اختياري) أو
pipلتثبيت mitmproxy. - عميل
claude/Claude Code الذي يمكن توجيهه إلىANTHROPIC_BASE_URLمخصص (أو أي عميل يطلبAPI.anthropic.com).
1- تثبيت mitmproxy
macOS (Homebrew):
brew install mitmproxy
أو باستخدام pip (يُوصى بـ virtualenv):
python3 -m venv venv
source venv/bin/activate
pip install mitmproxy
الأدوات التي تمتلكها الآن:
mitmproxy— واجهة مستخدم تفاعلية في طرفيةmitmweb— واجهة ويب (مُفتش الويب الافتراضي على :8081)mitmdump— وضع رأسية/سكريبت (ممتاز لتشغيل الإضافات)
2— تشغيل mitmproxy في الوضع العكسي
يقوم Claude Code عادةً بالاتصال بـ https://API.anthropic.com. شغّل mitmproxy كـ بروكسي عكسي يُعيد التوجيه إلى Anthropic API الحقيقي:
mitmweb --mode reverse:https://API.anthropic.com --listen-port 8000
- يستمع على
http://localhost:8000ويعيد التوجيه إلىhttps://API.anthropic.com. - يمكنك الوصول إلى الواجهة عبر
http://127.0.0.1:8081لفحص التدفقات مباشرة.
3— ثق بشهادة mitmproxy CA (لـ HTTPS)
يُنشئ mitmproxy شهادة CA محلية لتوقيع شهادات TLS للخوادم المُعتَرَضة. لتجنب أخطاء TLS، يجب أن تثق بها مؤقتًا:
- شغّل mitmproxy مرة واحدة — سيُنشئ الشهادات في
~/.mitmproxy/mitmproxy-ca-cert.pem. - على macOS: افتح Keychain Access →
File → Import Items→ استيراد~/.mitmproxy/mitmproxy-ca-cert.pem.- انقر مرتين على الشهادة → Trust → عيّن
Always Trustلـ SSL.
- انقر مرتين على الشهادة → Trust → عيّن
- لـ Firefox أو iOS/Android، استورد شهادة CA إلى مخازن الشهادات الخاصة بها (Firefox تستخدم مخزن شهادات خاص بها).
مهم: عند الانتهاء من الاختبار، أزل شهادة mitmproxy CA من مخازن الثقة.
4— أشرطة كود Claude على mitmproxy
قم بتعيين عنوان URL الأساسي لـ Anthropic إلى عنوان mitmproxy الخاص بك قبل تشغيل Claude Code:
export ANTHROPIC_BASE_URL="http://localhost:8000"
claude
الآن Claude Code → mitmproxy → Anthropic API.
5— ما ستلتقطه
الأشياء النموذجية التي ستلتقطها في الطلبات:
- حقل
system: رسالة النظام الخفية / قواعد السياسة (نص "المهم: ..."). tools: مخطط الأداة (بحث، git، تحرير، إلخ).messages: رسائل المستخدم / المساعد.
قد تصل الاستجابات بشكل متدفق ومجزأ (قطع JSON جزئية). يعرض mitmproxy كلاً من أجسام الطلبات والاستجابات، لذا يمكنك حفظها.
6— إضافة جاهزة للتشغيل: استخراج رسائل النظام فقط
أنشئ dump_claude_prompts.py بهذا المحتوى. إنها تستخرج حقول system وتضيفها إلى ملف نصي.
# dump_claude_prompts.py
from mitmproxy import http
import json
OUTPUT_FILE = "claude_system_prompts.txt"
def request(flow: http.HTTPFlow):
if "anthropic.com" not in flow.request.pretty_host:
return
try:
body = flow.request.get_text()
data = json.loads(body)
if "system" in data:
system_prompt = data["system"]
with open(OUTPUT_FILE, "a", encoding="utf-8") as f:
f.write("\n=== New System Prompt Captured ===\n")
f.write(system_prompt)
f.write("\n----------------------------------\n")
print(f"[+] Captured system prompt ({len(system_prompt)} chars)")
except Exception as e:
print(f"[!] Error parsing request: {e}")
تشغيله:
mitmdump -s dump_claude_prompts.py --mode reverse:https://API.anthropic.com --listen-port 8000
الإخراج: claude_system_prompts.txt يحتوي على كل كتلة system تم التقاطها.
7— إضافة موسعة: التقاط مطالبات النظام + تعريفات الأدوات
إذا كنت ترغب في التقاط كل مطالبات النظام وتعريفات tools في ملف نصي منظم، استخدم:
# dump_claude_prompts_and_tools.py
from mitmproxy import http
import json
OUTPUT_FILE = "claude_prompts_and_tools.txt"
def request(flow: http.HTTPFlow):
if "anthropic.com" not in flow.request.pretty_host:
return
try:
body = flow.request.get_text()
data = json.loads(body)
with open(OUTPUT_FILE, "a", encoding="utf-8") as f:
f.write("\n==============================\n")
f.write(" NEW CLAUDE REQUEST CAPTURED\n")
f.write("==============================\n\n")
if "system" in data:
f.write("### SYSTEM PROMPT ###\n")
f.write(data["system"].strip())
f.write("\n\n")
if "tools" in data:
f.write("### TOOL DEFINITIONS ###\n")
for tool in data["tools"]:
name = tool.get("name", "<no name>")
desc = tool.get("description", "<no description>")
params = json.dumps(tool.get("parameters", {}), indent=2)
f.write(f"- Tool: {name}\n")
f.write(f" Description: {desc}\n")
f.write(f" Parameters:\n{params}\n\n")
f.write("----------------------------------\n")
print("[+] Captured Claude system + tools")
except Exception as e:
print(f"[!] Error parsing request: {e}")
تشغيل:
mitmdump -s dump_claude_prompts_and_tools.py --mode reverse:https://API.anthropic.com --listen-port 8000
الإخراج: claude_prompts_and_tools.txt
8— إضافة متكاملة: التقاط الطلبات + الردود (سجلات مُرَّقمة زمنيًا ومُنظمة)
هذه هي الإضافة الكاملة التي تنشئ ملف .log مُرَّقَم زمنيًا لكل زوج من الطلب/الرد. احفظه باسم dump_claude_full.py.
mitmdump -s dump_claude_full.py --mode reverse:https://API.anthropic.com --listen-port 8000
الإخراج: ملف واحد .log لكل طلب في claude_captures/. يحتوي كل ملف على:
SYSTEM PROMPTTOOLSMESSAGESRAW JSON RESPONSEأوRAW TEXT RESPONSE(بما في ذلك شظايا البث)
9— المُحلل: استخراج & إزالة التكرار لتعليمات النظام
استخدم هذا السكريبت extract_system_prompts.py لفحص سجلات claude_captures/، واستخراج أقسام تعليمات النظام، وإزالة التكرار باستخدام SHA-256، ثم كتابة:
all_system_prompts.txt— تعليمات قابلة للقراءة البشرية (واحدة لكل تعليمة فريدة)system_prompts_index.csv— فهرس يحتوي علىfilename،prompt_excerpt،captured_at، وhash.
extract_system_prompts.py (احفظ وشغّل):
التشغيل: قدم فقط الترجمة العربية:python3 extract_system_prompts.py --dir claude_captures --out all_system_prompts.txt --index system_prompts_index.csv
10— زوج الطلب + الاستجابة في JSON (لإعادة التشغيل/التحليل)
إذا كنت تفضل زوجة سهلة للآلة (JSON واحد لكل التقاط + JSON رئيسي)، استخدم نص الزوج أدناه. إنه يقرأ ملفات .log التي أنتجها dump_claude_full.py، ويحلل الأقسام، ويسجل:
paired_captures.json— مصفوفة رئيسية من كائنات التقاطpaired_jsons/*.json— ملفات JSON لكل تقاط
نص الزوج (تنفيذ مثال):
# pair_captures.py (مفهوم)
# مُحاكاة: قراءة ملفات .log من claude_captures، وتحليل العناوين باستخدام التعبيرات المنتظمة،
# بناء الكائن: {source_file, captured_at, system_prompt, tools (قائمة)، messages, raw_response, response_json}
# كتابة ملفات JSON لكل تقاط في paired_jsons/، وملف رئيسي paired_captures.json.
# (انظر كود الزوج التفصيلي السابق في هذا الدليل — يمكنك نسخه حرفيًا أو تعديله)
يمكنك بعد ذلك:
- استخدام ملف JSON لكل تقاط لبناء طلبات إعادة التشغيل (curl، httpie) أو لإدخاله في بيئة اختبار محلية.
- تحويل التقاطات إلى تنسيق إعادة التشغيل الخادم في mitmproxy إذا أردت إعادة تشغيل حركة المرور بدقة دون اتصال.
11— إعادة تشغيل التقاطات (ملاحظة سريعة)
- يدعم mitmproxy إعادة التشغيل الخادم باستخدام تدفقات المسجلة (
mitmdump -w flows.mitmللتسجيل؛--server-replay flows.mitmلإعادة التشغيل). - مخرجات زوج JSON مخصصة للتحليل البرمجي أو نصوص إعادة التشغيل المخصصة (curl/requests). لإجراء إعادة تشغيل طلب/استجابة حقيقية بتنسيق mitmproxy، فكّر في تسجيل ملفات تدفق
.mitmباستخدامmitmdump -w flows.mitmبدلًا من النسخ النصية العادية.log.
12— تخفيف الأسرار والتنظيف
قبل مشاركة أو أرشفة السجلات:
- احذف أو خفّي قيم الرؤوس (التوثيق، الكوكيز). مثال (مقتطف بايثون):
# مثال تخفيف رؤوس بدائي
if "Authorization" in flow.request.headers:
flow.request.headers["Authorization"] = "<REDACTED>"
- احذف ثقة CA من Keychain بعد الاختبار لاستعادة أمان النظام.
- احتفظ بملفات التقاط في دليل مشفر إذا كانت ستستمر.
13— استكشاف الأخطاء وإصلاحها والنصائح
- أخطاء TLS → على الأرجح لم تثق في شهادة mitm CA أو العميل يربط الشهادات.
- لا توجد حركة مرور ملتقطة → تأكد من ضبط
ANTHROPIC_BASE_URLعلىhttp://localhost:8000أو تكوين العميل لاستخدام وكيل HTTP. - استجابات JSON مجزأة → غالبًا ما تُرسل Anthropic JSON جزئيًا؛ يجب أن تعامل مُحلّلاتك JSON الجزئي/غير الصحيح بسلاسة (حاول التقاط
RAW TEXT RESPONSEثم إعادة بنائه). - الشهادة على الأجهزة المحمولة → استيراد شهادة mitm إلى مخزن الثقة للجهاز؛ بالنسبة لـ iOS، احصل على تعقيدات التهيئة.
- السجلات الكبيرة → دوّر السجلات أو اضغطها. فكّر في تخزين الحقول المستخرجة فقط (النظام، الأدوات، الرسائل) لتقليل الحجم.
14— سير العمل النموذجي (التشغيل الكامل)
- ابدأ mitmproxy بإضافة كاملة:
mitmdump -s dump_claude_full.py --mode reverse:https://API.anthropic.com --listen-port 8000
- صدّر البيئة وشغّل Claude Code:
export ANTHROPIC_BASE_URL="http://localhost:8000"
claude
# تفاعل مع Claude Code كما هو معتاد
- بعد الجلسة، أوقف mitmproxy. راجع
claude_captures/للبحث عن ملفات.logمُرَقَّمة حسب التوقيت. - استخرج تعليمات النظام الفريدة:
python3 extract_system_prompts.py --dir claude_captures --out all_system_prompts.txt --index system_prompts_index.csv
- زوج الطلبات/الاستجابات في JSON:
python3 pair_captures.py # أو شغّل سكريبت الزوجة الجاهز المذكور أعلاه
- قم بإزالة الأسرار وحذف شهادة mitm من الثقة (تنظيف).
ملاحظات أخيرة
هذا السير العمل هو الطريقة التي استخدمها الباحثون والمهندسون لفحص عملاء مثل Claude Code لفهم:
- كيفية توصيل تعليمات النظام/القيود إلى النموذج، وكيفية التعامل مع JSON الجزئي المُتدفّق، وما هي السياسات التي يرفقها العميل بكل طلب.