وحدة تحكم الويب
يقدّم Chute وحدة تحكم إدارية عبر HTTP من داخل النواة العاملة. وهي الواجهة الوحيدة المتطابقة على كل المنصّات، ولذلك يشير إليها هذا الدليل كلّما احتاج شيء إلى أن يُرى لا أن يُضبط: مسار طلب، أو إعادة كتابة لا تعمل، أو سبب رفض اتصال.
هذه ليست Chute Dashboard. فـ Dashboard تطبيق macOS مستقل يتصل بنسخة من Chute، أما وحدة التحكم الموصوفة هنا فتقدّمها النواة نفسها وتُفتح بمتصفّح.
التفعيل والدخول
تحتاج وحدة التحكم إلى external-http-controller في قسم [General]، وهي معطّلة افتراضياً:
[General]
external-http-controller = 127.0.0.1:9090
external-http-ui = true
الوصول مُصادَق عليه. وإن لم تضبط external-http-secret فإن Chute يولّد رمزاً ويحفظه في ملف control-token، فيُعاد استخدام الرمز نفسه بعد إعادة التشغيل — ولذا فالطريقة العملية للدخول أن يسلّمك التطبيق العنوان ومعه الرمز جاهزاً. تلتقط الصفحة الرمز من ذلك العنوان عند التحميل وتحتفظ به في localStorage المتصفّح، فيسجّل المتصفّح الدخول مرة واحدة. ولكل منصّة مدخل لذلك؛ انظر فتح وحدة تحكم الويب.
Overview (نظرة عامة)
هل الخدمة تعمل، ومنذ متى، وكم تستهلك من الذاكرة، وعناوين ومنافذ مستمعَي HTTP و SOCKS، ومسارات الملفات التي يستخدمها هذا التشغيل. وحين لا تدري إلى أي نسخة يشير تبويب المتصفّح، هذه الصفحة تعرّفها.
Traffic (حركة البيانات)
البايتات التراكمية والسرعة الحالية للمحرك كله، ورسم بياني لتاريخ السرعة، وتفصيل حسب المهايئ. استخدمها للإجابة عن «هل يتحرك شيء أصلاً»، ولمعرفة أي مخرج يحمل الحمل حين تختار مجموعة سياسات بين عدة مخارج.
Connections (الاتصالات)
الصفحة التي ستقضي فيها أطول وقت. وفيها تبويبان:
- Current (الحالية) — الاتصالات المفتوحة الآن.
- History (السجل) — الاتصالات المغلقة، الأحدث أولاً، تُقرأ من سجلات هذا التشغيل.
يحمل كل صف المضيف والمنفذ والنوع والسياسة المختارة والقاعدة المطابِقة والمدة وعدّادات البايت. وتُحسب المدة منذ أن رأى تبويب المتصفّح هذا الاتصالَ للمرة الأولى، لا منذ فتح الاتصال، فلا معنى لها إلا في تبويب Current (الحالية). ويوسّع Inspect (فحص) الصف في مكانه ليجيب عن لماذا ذهب هذا الطلب إلى هناك:
| الحقل | ماذا يخبرك |
|---|---|
| القاعدة المطابقة / مصدر القاعدة | سطر القاعدة الذي حسم هذا الاتصال، ومن أي قسم جاء |
| السياسة المختارة / المحوّل | السياسة التي اختارتها القاعدة، والمخرج الذي حملها فعلاً |
| مصدر DNS | أي محلِّل أجاب، وهل كانت إصابة في المخبأ |
| إعادات الكتابة المطبّقة | قواعد إعادة الكتابة أو المحاكاة التي غيّرت هذه الرسالة — بنصّ القاعدة نفسها؛ يُحتفظ بـ 16 إصابة على الأكثر لكل اتصال، وبعدها يذكر الصف كم واحدة أخرى غير معروضة |
| سبب الإغلاق / ملاحظة | لماذا انتهى، وما أرادت النواة قوله عنه |
وتحت الجدول يعرض الصف الموسَّع الطلب والاستجابة الملتقطَين — الترويسات والجسم كما مرّا على الخط (بعد فك التشفير للمضيفين المشمولين بـفك تشفير HTTPS).
الأجسام تشترط تسجيل الحركة
الأجسام موجودة فقط إن كان Chute قد التقطها. فعّل التسجيل قبل إعادة إنتاج المشكلة:
replica = trueفي[General]، أو- Chute Mac: شريط القوائم ← التقاط الحركة، أو
- عبر الـ API:
PUT /api/features/record-trafficبالجسم{"enabled": true}.
من دونه تظهر الاتصالات كاملة النسبة والتوقيتات — الناقص هو الحمولات وحدها. ويزيد قسم [Replica] من تضييق ما يُلتقط — وكل مرشّحاته نافذة، بما فيها hide-crashlytics-request — فالطلب الذي يُستبعد هناك لن يكون له جسم أيضاً.
التصدير إلى HAR
يُنزّل زر Export HAR (تصدير HAR) في صفحة Connections التبويب الحالي كملف HAR 1.2 — بحدّ 100 مُدخل، وهو الافتراضي للنقطة (يرفعه limit على النقطة إلى 300 على الأكثر)، بينما يعرض تبويب History نفسه حتى 200. و HAR صيغة قياسية: افتحه في أدوات مطوّري المتصفّح (لوحة الشبكة ← استيراد) أو في أدوات مثل Charles و Proxyman.
يحمل الملف ما تتوقّعه تلك الأدوات — ترويسات الطلب والاستجابة، والتوقيتات، والأجسام إن كان التسجيل مفعّلاً — إضافة إلى كائن _kl لكل مُدخل يحمل ما لا حقل له في HAR: السياسة المختارة، والقاعدة المطابِقة، وعمليات إعادة الكتابة التي عملت. وتأتي أزمنة الإرسال والاستقبال من طوابع الالتقاط نفسها لا من استنتاج، فهي ذات معنى. وللتطبيقات مخارجها الخاصة أيضاً: يقدّم Dashboard في Chute iOS الخيارين Export as HAR و Export All as HAR (تولّدهما النواة بالصيغة نفسها)، ونافذة تفاصيل الاتصال في Chute Mac فيها زر الطلبات والسجل الذي يفتح وحدة التحكم — صفحتها الرئيسية لا ذلك الاتصال بعينه. المُدخل اتصال واحد: على اتصال keep-alive حمل عدة طلبات، يصف التصدير الرسالة الأولى ويذكر كم بايتاً من الرسائل اللاحقة أغفل.
DNS
مخبأ المحلِّل مع الخادم الذي أجاب عن كل سجل، والمدخلات الآتية من [Host]، وملف hosts الخاص بالنظام. ويمسح Clear Cache (مسح الذاكرة المؤقتة) السجلات الديناميكية؛ ولا يوجد هنا حذف لسجل بعينه — فذلك متاح فقط عبر DELETE /api/dns/records/:domain في الـ API.
Policies (السياسات)
وضع الخروج (Rule / Global / Direct — القواعد / عام / مباشر) وكل مجموعة سياسات مع اختيارها الحالي. وتغيير الاختيار هنا يسري فوراً على النواة العاملة — وهو الإجراء نفسه الذي تفعله بتبديل مجموعة داخل التطبيقات.
Rules (القواعد)
تتقاسم هذه الصفحة فئتان مختلفتان، وسلوكهما ليس واحداً.
قواعد التوجيه — قسم [Rule] مرتّباً بترتيب التقييم. للقراءة فقط، لأنها تأتي من ملف الإعداد.
قواعد إعادة الكتابة و Mock — إعادة كتابة الرابط والترويسة والجسم و Mock، إضافةً إلى قائمة مضيفي MitM. هذه يمكن إضافتها وحذفها هنا:
- الصق القاعدة تماماً كما كنت ستكتبها في ملف الإعداد ثم اضغط Add (إضافة). والسطر الذي يتعذّر تحليله يُرفض مع اعتراض المحلِّل بدل أن يُخزَّن — فالقاعدة التي لا تطابق أبداً بلا عرَض، ومن الأفضل أن تعرف الآن.
- يحذف Remove (إزالة) قاعدة واحدة، ويُفرغ Clear (مسح) عائلة كاملة.
- التغييرات تعيش في النواة العاملة فقط. لا تُكتب في ملف الإعداد، وتعيدها إعادة التحميل أو التشغيل إلى ما يقوله الملف. استخدم هذا لتجربة قاعدة، ثم اكتب السطر الناجح في الملف.
مطابقات إعادة الكتابة و Mock — كل قاعدة إعادة كتابة أو محاكاة عملت في هذا التشغيل، مع عدّادها ووقت آخر مطابقة؛ يتتبّع الجدول حتى 512 قاعدة مختلفة، ويذكر كم قاعدة أخرى عملت بعد ذلك دون تتبّع. هذا الجدول هو الجواب عن «إعادة الكتابة عندي لا تفعل شيئاً»: القاعدة التي لا تظهر هنا لم تطابق قط، وهي مشكلة غير تلك التي طابقت ولم تُحدث أثراً مرئياً. وللتفريق بينهما انظر لماذا لا تفعل إعادة الكتابة شيئاً؟.
Diagnostics (التشخيص)
ما الذي يحتفظ به المحرك، وكيف انتهى التشغيل السابق، ومجموعة فحوص يمكنك إطلاقها عليه.
- Footprint / CPU / Uptime / Live flows / Superseded flows / Engine generation (استهلاك الذاكرة / CPU / مدة التشغيل / التدفقات النشطة / تدفقات من جيل سابق / جيل المحرك) — شكل هذا التشغيل الآن. والبصمة التي تتصاعد بينما يبقى عدد التدفقات ثابتاً تستحق البحث؛ وعلى iOS و tvOS هي أيضاً ما يراقبه النظام قبل استرجاع الامتداد.
- Previous exit (الخروج السابق) — إمّا
Clean(سليم) أوTerminated unexpectedly(أُنهي بشكل غير متوقع) أوKilled for memory(أُوقف بسبب الذاكرة)، مع معرّف التشغيل السابق ومدّته وذروة بصمته. اقرأ هذا أولاً حين «ينهار» Chute: فـ Killed for memory (أُوقف بسبب الذاكرة) تعني أن النظام استرجع Chute لا أن Chute أخفق، وهذا يغيّر ما تبحث عنه. - Refusals (حالات الرفض) — جدول بما رفضه المحرك ولماذا، معدوداً حسب المورد والسبب. وحين يسقط اتصال ولا يفسّره شيء آخر، فالسبب عادةً هنا.
- Run a probe (تشغيل فحص) — الوصول (ICMP، أو TCP إن أعطيت منفذاً)، واستعلام DNS عبر المحلِّل العامل، وكشف عنوان الخروج، واختبار زمن استجابة سياسة. كلّها محدودة وتجيب مرة واحدة بالضبط. واسم السياسة غير المعرّف يُرفض بدل أن يُقاس، فيعود الخطأ المطبعي خطأً مطبعياً.
- Events (الأحداث) — لحظات هذا التشغيل الجديرة بالانتباه: الإخفاقات الجماعية، وتغيّر المخرج، وما شابه.
- Tailscale — حالة المحرك الحيّة حين يكون قسم
[Tailscale]مضبوطاً، وidleحين لا يوجد، وهي إجابة طبيعية. - Download diagnostic bundle (تنزيل حزمة التشخيص) — أرشيف واحد منقّح تُرفقه برسالة الدعم. وما فيه موصوف في إرسال حزمة تشخيصية.
Config (الإعداد)
الإعداد العامل معروضاً في صندوق قابل للتحرير، مع Reload (إعادة تحميل) لتطبيق ما فيه.
الإعداد المعروض هنا منزوع الأسرار. فكلمات المرور وسرّ التحكم وعبارة مرور الـ CA ومفاتيح WireGuard وما شابهها تظهر بصيغة
<redacted>. و Reload (إعادة تحميل) يطبّق ما في الصندوق حرفياً، فإعادة تحميل النص كما هو معروض تستبدل تلك الأسرار بالكلمة<redacted>نفسها داخل النواة العاملة، وستبدأ السياسات التي تحتاجها بالفشل. أما ملف الإعداد فلا يُمسّ، ويكفي إعادة اختيار الإعداد لاستعادته.استخدم هذه الصفحة لقراءة الإعداد ولتطبيق تعديل كتبته بالكامل بنفسك. ولتحرير الملف ذاته استخدم المحرّر داخل التطبيقات.
Logs (السجل)
متابعة حيّة لسجل النواة، ملوّنة حسب المستوى، مع Pause (إيقاف مؤقت) ريثما تقرأ. ومستوى التفصيل يحدّده loglevel لا هذه الصفحة — فإن لم تكن الأسطر التي تحتاجها هنا، ارفعه ثم أعد الإنتاج.
ما الذي تستطيع وحدة التحكم تسليمه
عامل الوصول إلى وحدة التحكم كوصول إلى كل ما رآه التشغيل. فهي قادرة على تقديم سجلات الاتصالات بما فيها الروابط والترويسات وأسماء العمليات، وأجسام الطلبات والاستجابات الملتقطة، والإعداد، والسجل. ولهذا ليست الواجهة بلا مصادقة هي الافتراض، ولهذا يتطلّب ربطها خارج المحلي سرّاً تضبطه أنت — انظر external-http-secret.
هذه الصفحة ترجمة للنسخة الإنجليزية. في حال وجود اختلاف، يُعتمد على النسخة الإنجليزية.
ملاحظة: التطبيق لا يدعم اللغة العربية حاليًا.