Files
OmniRoute/docs/i18n/ar/docs/security/STEALTH_GUIDE.md
Diego Rodrigues de Sa e Souza 8feea123bb feat(docs): mirror every docs/ page in all 65 locales (#14106)
* feat(docs): mirror every docs/ page in all 65 locales

Extends the documentation mirrors from the 22-page core set (#13940) to
every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors
(6,208 new), language bars rewritten for the full locale list, state
adopted so the blocking drift gate now covers all 152 pages.

run-translation.mjs: an oversized block made only of table rows or list
items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is
cut at item boundaries and rejoined without a blank line — the single
16-40 KB request outlived the backend socket for verbose scripts. 48
older mirrors whose tables had lost rows were retranslated with --force.

* docs(i18n): refresh mirrors for the sources the base changed since the branch cut

Section-level retranslation of the 29 docs (and README.md) whose source
or mirrors moved on release/v3.8.51 during the run, then state adoption;
the drift gate is green again on the merged tree.
2026-09-18 13:16:46 -03:00

29 KiB
Raw Blame History

Stealth Guide (العربية)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


مصدر الحقيقة: open-sse/utils/tlsClient.ts، وopen-sse/services/{tlsClientBase,claudeTlsClient,perplexityTlsClient,grokTlsClient,notionTlsClient,lmarenaTlsClient,claudeCodeCCH,claudeCodeFingerprint,claudeCodeObfuscation,claudeCodeCompatible}.ts، وopen-sse/config/cliFingerprints.ts، وsrc/mitm/ آخر تحديث: 2026-09-02 — v3.8.51 الجمهور المستهدف: المهندسون المسؤولون عن صيانة عمليات التكامل التخفيّة الخاصة بكل مزوّد.

يتكامل OmniRoute مع مزوّدين تعمل واجهاتهم الطرفية على أخذ بصمات نشطة للعملاء غير الرسميين (TLS JA3/JA4، وترتيب الترويسات، وبنية جسم JSON، ورموز التكامل). توثّق هذه الصفحة أسطح التخفي التي يتيحها OmniRoute ومواضع تنفيذها.

إشعار قانوني وأخلاقي

توجد ميزات التخفي لكي يتمكن OmniRoute من العمل كطبقة توافق بين الحسابات الرسمية المملوكة للمستخدمين (Claude Code CLI، وCodex، وAntigravity، وCursor، وغيرها) وواجهة API الموحّدة لـ OmniRoute. وهي ليست مخصّصة للتحايل على اكتشاف الاحتيال، أو مشاركة بيانات الاعتماد، أو انتهاك شروط خدمة المزوّد. يتوقع المشرفون من المشغّلين الالتزام بشروط خدمة الجهات المنبع التي وافقوا عليها عند إنشاء الحسابات.


طبقة أخذ بصمات TLS

open-sse/utils/tlsClient.ts — wreq-js (Chrome 124)

تُنشأ جلسات wreq-js الدائمة عند الحاجة لكل نطاق حساب ووكيل محلول. يحتفظ TlsClient على مستوى العملية بمجمّع لا يتجاوز 128 جلسة تنتحل هوية Chrome 124 على macOS لدى الجهات المنبع الواقعة خلف Cloudflare. يفشل TlsClient.fetch() بشكل مغلق عندما تكون بيئة التشغيل الأصلية غير متاحة؛ ويمكن للجهة المستدعية اختيار مسار احتياطي صراحةً خارج هذا الغلاف.

  • ملف تعريف الجلسة: browser: "chrome_124", os: "macos"
  • حلّ الوكيل (حسب الأولوية): HTTPS_PROXYHTTP_PROXYALL_PROXY (وكذلك الصيغ ذات الأحرف الصغيرة)
  • المهلة: TLS_CLIENT_TIMEOUT_MS (ترث من FETCH_TIMEOUT_MS، والقيمة الافتراضية 600000)
  • استجابة wreq-js متوافقة مع fetch (headers، وtext()، وjson()، وclone()، وbody).
  • مراقب البايت الأول (open-sse/utils/tlsFirstByteWatchdog.ts، #12656): يُحلّ TlsClient.fetch() بمجرد وصول ترويسات الجهة المنبع، ولذلك لا يستطيع TLS_CLIENT_TIMEOUT_MS وحده فرض حد زمني على جسم لا يُنتج بايته الأول أبدًا. يجعل guardTlsFirstByte() أول استدعاء read() للجسم يتسابق مع TLS_FIRST_BYTE_WATCHDOG_MS (القيمة الافتراضية 10000، وتعطّله القيمة 0)؛ ولا يتأثر الجسم السليم، بينما يؤدي الجسم المتوقف إلى إلغاء قارئ wreq ويسمح لمنطق الرجوع الاحتياطي الحالي لـ TLS في proxyFetch بالانتقال إلى موزّع الاتصال المباشر/عبر الوكيل (أما الطلب غير الآمن لإعادة الإرسال، مثل طلب POST ذي جسم، فسيظل يرمي خطأً بدل إعادة محاولته بصمت).

نقل مزوّدي ملفات تعريف ارتباط الويب — wreq-js 3.2.0

يمثّل open-sse/services/tlsClientBase.ts المحوّل المشترك لوسائل نقل ملفات تعريف ارتباط الويب الخمس المتخصصة أدناه. يختار كل غلاف رفيع خاص بمزوّد ملف تعريف متصفح/نظام تشغيل. يستخدم المحوّل محمّل بيئة تشغيل wreq الوحيد ومجمّع النقل في open-sse/utils/tlsClient.ts، مع الفهرسة حسب ملف التعريف + نظام التشغيل + الوكيل المحلول، بينما يستخدم كل طلب cookieMode: "ephemeral". ولذلك تشترك الحسابات والطلبات في اتصالات مستوى النقل، لكنها لا تشترك مطلقًا في جلسة wreq أو مخزن ملفات تعريف ارتباط.

المزوّد ملف التعريف نظام التشغيل المحاكى سياسة نهاية تدفق EOF
Claude chrome_146 Linux تضمين [DONE]
Perplexity firefox_148 macOS تضمين event: end_of_stream
Grok chrome_146 Linux استبعاد [DONE]
Notion chrome_146 Windows تضمين [DONE]
LMArena chrome_146 Windows بلا علامة حارسة؛ الإغلاق عند EOF أصلي
  • يستهلك البث ReadableStream للاستجابة الأصلية مباشرةً؛ ولا يُنشأ أي ملف مؤقت أو عملية جانبية.
  • يُفحص ما يصل إلى 256 بايت أولية قبل إتاحة التدفق. يخزّن مزوّدو SSE الأخطاء غير التابعة لـ SSE مؤقتًا؛ ويحوّل Grok/LMArena تحديات Cloudflare إلى 403 وصفحات HTML الاعتراضية إلى 502.
  • تظل مهلة الطلب الأصلية مغلّفة بموعد نهائي مطلق صارم في JS. يؤدي التعليق إلى إبطال وإغلاق وسيلة النقل المتأثرة فقط لملف التعريف/نظام التشغيل/الوكيل، قبل أن يعيد الطلب التالي إنشاءها.
  • تكون أولوية حلّ الوكيل كالتالي: proxyUrl الخاص بكل استدعاء ← سياق الحساب/لوحة المعلومات الخاص بالطلب ← HTTPS_PROXY/HTTP_PROXY/ALL_PROXY (بما في ذلك الصيغ ذات الأحرف الصغيرة). تفشل أخطاء الحلّ بشكل مغلق بدل تسريب اتصال مباشر. يتعمّد LMArena إجراء الحلّ مقابل arena.ai.
  • يعيد byteResponse عنوان URL من نوع data: محددًا بنوع المحتوى من دون إفساد UTF-8.
  • الأخطاء هي TlsClientUnavailableError (عدم توفر الحزمة/الملحق)، وTlsClientHangError (تجاوز الموعد النهائي)، وWreqTransportCapacityError (رمز خطأ سعة الجلسات المشتركة) عندما تكون جميع خانات ملف التعريف/نظام التشغيل/الوكيل المحدودة البالغ عددها 128 نشطة أو قيد الإغلاق.

تظل جلسة TlsClient العامة أعلاه متخصصة في حالة ملفات تعريف الارتباط الدائمة المدعومة بالمتصفح. يعيد المساران استخدام محمّل واحد مخزّن مؤقتًا لوحدة wreq وخطاف دورة حياة العملية؛ وتظل مجمّعاتهما منفصلة لأن مدد صلاحية ملفات تعريف الارتباط فيهما مختلفة عمدًا.

تدعم الحزمة المثبّتة ملفات التعريف، لكن قبول WAF الفعلي قد يتغير بصورة مستقلة عن اختبارات العقود المحلية. تحقّق من تغييرات البصمة باستخدام حساب فعلي مصرّح به صراحةً قبل الادعاء بتحقيق التكافؤ مع متصفح الجهة المنبع.


حزمة التخفي لـ Claude Code

عندما يكون cliCompatMode مفعّلًا، يعيد OmniRoute تشكيل طلبات Claude الصادرة بحيث لا يمكن تمييزها عن حركة مرور claude-cli. تتعاون ثلاث وحدات:

claudeCodeFingerprint.ts

تحسب بصمة cc_version المكوّنة من 3 أحرف والمضمّنة في ترويسة الفوترة:

SHA256(SALT + msg[4] + msg[7] + msg[20] + version)[:3]
  • FINGERPRINT_SALT = "59cf53e54c78" (مضمّنة مباشرةً؛ تطابق العميل الرسمي)
  • المدخلات: الأحرف الموجودة عند الفهارس 4 و7 و20 من نص رسالة المستخدم الأولى + سلسلة الإصدار
  • المخرجات: بادئة سداسية عشرية مكوّنة من 3 أحرف

claudeCodeCCH.ts (تجزئة محتوى العميل)

فحص تكامل من جانب الخادم يحسبه عميل Claude Code CLI الرسمي عبر Bun/Zig. يعيد OmniRoute تنفيذه باستخدام xxhash-wasm:

  1. إجراء تسلسل للنص مع العنصر النائب cch=00000;
  2. xxhash64(bytes, seed) & 0xFFFFF
  3. قيمة سداسية عشرية صغيرة الأحرف مكوّنة من 5 أحرف ومكمّلة بأصفار
  4. استبدال cch=00000; بالرمز المحسوب

الثوابت:

  • البذرة: 0x6e52736ac806831e
  • النمط: /\bcch=([0-9a-f]{5});/

claudeCodeObfuscation.ts

تُدرج واصلًا بعرض صفري من Unicode (U+200D) بعد الحرف الأول من أسماء العملاء «الحساسة» حتى لا تتمكن مرشحات المنبع من العثور عليها باستخدام grep. قائمة الكلمات الافتراضية:

opencode, open-code, cline, roo-cline, roo_cline, cursor, windsurf,
aider, continue.dev, copilot, avante, codecompanion

يُطبّق على: كتل system، وكل messages[].content، وtools[].description / tools[].function.description. يمكن للمشغّل تجاوز القائمة عبر setSensitiveWords().

claudeCodeCompatible.ts — موفّرو anthropic-compatible-cc-*

لخدمات ترحيل Anthropic التابعة لجهات خارجية التي لا تقبل سوى حركة مرور «Claude Code حقيقية»:

  • CLAUDE_CODE_COMPATIBLE_USER_AGENT = "claude-cli/2.1.258 (external, sdk-cli)"
  • CLAUDE_CODE_COMPATIBLE_STAINLESS_PACKAGE_VERSION = "0.112.1"
  • CLAUDE_CODE_COMPATIBLE_STAINLESS_RUNTIME_VERSION = "v26.3.0"
  • القيمة الافتراضية لـ anthropic-beta هي "claude-code-20250219,interleaved-thinking-2025-05-14,effort-2025-11-24"
  • يضيف مفتاح التبديل «Enable redact-thinking beta» الخاص بكل اتصال القيمة redact-thinking-2026-02-12 عندما يتطلب منبع متوافق مع CC تحديدًا تدفقات تفكير منقّحة
  • يخزّن مفتاح التبديل «Enable summarized thinking display» الخاص بكل اتصال القيمة providerSpecificData.requestDefaults.summarizeThinking، ويضيف display: "summarized" إلى طلبات التفكير المتوافقة مع CC التي لم تحدد وضع عرض مسبقًا
  • CONTEXT_1M_BETA_HEADER = "context-1m-2025-08-07" (عائلة Opus/Sonnet 4.x)
  • المسار الافتراضي: /v1/messages?beta=true

الوحدات الشقيقة ضمن الحزمة نفسها:

  • claudeCodeConstraints.ts — قواعد درجة الحرارة والتحكم في ذاكرة التخزين المؤقت
  • claudeCodeToolRemapper.ts — إعادة تعيين أسماء الأدوات
  • claudeCodeExtraRemap.ts — تسوية إضافية للحمولة

التخفي في Antigravity

تحافظ طلبات Antigravity على نص المستدعي بايتًا ببايت. لا يُدرج OmniRoute أحرفًا بعرض صفري في المطالبات، ولا يعيد تسمية الأدوات أو يحقنها لتقليد عميل IDE.

antigravityHeaderScrub.ts

يزيل علامات Stainless SDK (x-stainless-lang، وx-stainless-package-version، وx-stainless-os، وx-stainless-arch، وx-stainless-runtime، وx-stainless-runtime-version، وx-stainless-timeout، وx-stainless-retry-count، وx-stainless-helper-method) قبل إعادة التوجيه.

⚠️ مخاطرة: ANTIGRAVITY_CREDITS=always (بؤرة لحظر الحسابات)

توجّه القيمة ANTIGRAVITY_CREDITS=always (التي يستهلكها open-sse/executors/antigravity.ts) كل طلب عبر تجاوزات رصيد Antigravity AI (أرصدة Google مدفوعة) بدلًا من السماح لحصة المستوى المجاني من Google بالتحكم في الطلبات. هذا موثّق بوصفه ميزة، لكنه البلاغ الأكثر شيوعًا على الإطلاق بشأن انتهاك شروط الخدمة الذي نراه — فقد حُظرت عدة حسابات Google Ultra مع ظهور 403 / "service disabled for ToS violation" / insufficient_quota بعد التشغيل لبضع ساعات باستخدام =always.

يتم الإنفاذ في المنبع من جانب Google، وليس أمرًا يستطيع OmniRoute منعه. يجعل اسم متغير البيئة والمستندات الحالية الأمر يبدو كأنه إعداد آمن يمكن تفعيله؛ لكنه ليس كذلك.

لماذا يستدعي هذا اكتشاف إساءة الاستخدام بصورة أكثر صرامة من استخدام المستوى المجاني فقط:

  • يُصنّف الإنفاق الآلي المستمر على حساب Google واحد بصورة مختلفة عن بلوغ حصة المستوى المجاني ثم التوقف.
  • لا يوجد سقف لمعدل تجاوزات الرصيد، لذا يمكن لعميل ذي إعدادات خاطئة استهلاك عدة مئات من الدولارات خلال دقائق، والظهور كما لو كان يعيد بيع مفتاح API أو يولّد حركة مرور آلية.
  • يؤدي استخدام عدة مستخدمين لـ OmniRoute أرصدة التجاوز بالتوازي من عنوان IP خارجي واحد إلى تضخيم الإشارة.

الوضعية الموصى بها:

  1. أبقِ القيمة الافتراضية ANTIGRAVITY_CREDITS=off ما لم يقبل المشغّل صراحةً مخاطر الرصيد المدفوع وإنفاذ الإجراءات على الحساب. ترسل retry الطلب العادي أولًا ولا تحقن الأرصدة أكثر من مرة واحدة بعد استجابة حصة مؤهلة بالحالة 429؛ بينما تحقن always الأرصدة في الطلب الأول.
  2. وزّع الحمل بين الموفّرين عبر Auto-Combo (model: "auto" أو توليفة kr/glm/etc) بدلًا من إشباع حساب Antigravity واحد.
  3. اضبط حدود RPM لكل اتصال في صفحة تعديل موفّر Antigravity (Dashboard → Providers → Antigravity → الاتصال → حد المعدل). يُعد 3060 RPM حدًا أعلى يمكن الدفاع عنه للاستخدام المستمر.
  4. استخدم شبكة منبع مستقرة يتحكم بها المشغّل وتجنّب مشاركة حساب واحد بين مستخدمين أو أعباء عمل غير مترابطة.
  5. في حال الحظر: قدّم اعتراضًا عبر support.google.com ← «Restore Workspace/Account access»، مع نص استجابة quota_exceeded / service disabled الدقيق الذي أرسلته Google. استعادة الحساب غير مضمونة.

يوثّق مرجع البيئة الآثار المترتبة على الحساب والإنفاق لكل وضع من أوضاع الأرصدة.

نقاط التماس:

  • open-sse/executors/antigravity.ts — يقرأ process.env.ANTIGRAVITY_CREDITS
  • src/lib/oauth/providers/antigravity.ts — توصيل بيانات الاعتماد
  • تقرير الحادثة الأصلي: المناقشة #1183

سجل بصمات CLI — open-sse/config/cliFingerprints.ts

جدول خاص بكل مزوّد يثبّت الترتيب الدقيق للترويسات وترتيب حقول جسم JSON، كما جرى التقاطهما من سجلات mitmproxy الخاصة بأدوات CLI الرسمية. الأدوات المسجّلة حاليًا: codex وclaude، بالإضافة إلى ملفات التعريف المشتقة في وقت التشغيل ضمن providerHeaderProfiles.ts لكل من antigravity وgithub.

interface CliFingerprint {
  headerOrder: string[]; // حساس لحالة الأحرف
  bodyFieldOrder: string[]; // مفاتيح JSON ذات المستوى الأعلى
  userAgent?: string | (() => string);
  extraHeaders?: Record<string, string>;
}

يمكن التبديل لكل مزوّد عبر متغيرات البيئة (انظر أدناه). عند التعطيل، تظهر الترويسات/مفاتيح الجسم بأي ترتيب يوفّره Node/JSON — ما يجعل اكتشاف البصمة سهلًا.


وكيل MITM (Antigravity، وLinux/macOS/Windows)

بالنسبة إلى أدوات CLI التي لا يمكن إعادة توجيه ملفاتها التنفيذية عبر OPENAI_BASE_URL، يشغّل OmniRoute وكيلًا محليًا ينهي اتصال TLS. توجد نقاط النهاية ضمن src/app/api/cli-tools/antigravity-mitm/.

الطريقة نقطة النهاية الغرض
GET /api/cli-tools/antigravity-mitm الحالة — التشغيل، pid، dnsConfigured، certExists
POST /api/cli-tools/antigravity-mitm بدء MITM (يتطلب apiKey + sudoPassword)
DELETE /api/cli-tools/antigravity-mitm إيقاف MITM
GET /api/cli-tools/antigravity-mitm/alias عرض الأسماء البديلة للنماذج
PUT /api/cli-tools/antigravity-mitm/alias حفظ الأسماء البديلة للنماذج لأداة

المضيف المستهدف اعتراضه: daily-cloudcode-pa.googleapis.com (الخادم الرئيسي لـ Antigravity).

تسلسل البدء (src/mitm/manager.ts::startMitm)

  1. إنشاء شهادة موقّعة ذاتيًا عبر selfsigned (RSA-2048، SHA-256، سنة واحدة) — cert/generate.ts
  2. تثبيت الشهادة في مخزن الثقة الخاص بالنظام — cert/install.ts
  3. إضافة إدخال المضيفين 127.0.0.1 daily-cloudcode-pa.googleapis.comdns/dnsConfig.ts
  4. تشغيل src/mitm/server.cjs مع ROUTER_API_KEY + MITM_LOCAL_PORT (القيمة الافتراضية 443)
  5. حفظ PID في <DATA_DIR>/mitm/.mitm.pid

الاكتشاف الديناميكي لمخزن الثقة في Linux — cert/install.ts

تمرّ الدالة getLinuxCertConfig() عبر قائمة أولويات وتختار أول دليل موجود:

عائلة التوزيعة الدليل أمر التحديث
Debian / Ubuntu /usr/local/share/ca-certificates update-ca-certificates
Arch / CachyOS / Manjaro /etc/ca-certificates/trust-source/anchors update-ca-trust
Fedora / RHEL / CentOS /etc/pki/ca-trust/source/anchors update-ca-trust
openSUSE /etc/pki/trust/anchors update-ca-certificates

اسم ملف الشهادة: omniroute-mitm.crt. تتم مطابقة البصمة عبر getCertFingerprint() (SHA-1 لبيانات DER).

بالإضافة إلى ذلك، تثبّت updateNssDatabases() الشهادة في قواعد بيانات NSS الخاصة بكل مستخدم عندما تكون certutil متاحة: ~/.pki/nssdb، و~/snap/chromium/.../nssdb، وجميع ملفات تعريف Firefox (بما فيها snap)، تحت الاسم المستعار OmniRoute MITM Root CA.

macOS / Windows

  • macOS: security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain
  • Windows: PowerShell بصلاحيات مرتفعة → certutil -addstore Root

المصادقة

تتطلب جميع نقاط نهاية MITM مصادقة إدارية (requireCliToolsAuth). تُخزّن كلمة مرور sudo مؤقتًا ضمن نطاق الوحدة (وليس في globalThis مطلقًا)، وتُمسح عند استدعاء stopMitm().


تجاوزات وكيل المستخدم — متغيرات البيئة (القسم 12 من .env.example)

المتغير القيمة الافتراضية
CLAUDE_USER_AGENT claude-cli/2.1.258 (external, cli)
CODEX_USER_AGENT codex-cli/0.149.0 (Windows 10.0.26200; x64)
GITHUB_USER_AGENT GitHubCopilotChat/0.54.0
ANTIGRAVITY_USER_AGENT antigravity/2.0.1 linux/arm64 google-api-nodejs-client/10.3.0
KIRO_USER_AGENT AWS-SDK-JS/3.0.0 kiro-ide/1.0.0
QODER_USER_AGENT Qoder-Cli
CURSOR_USER_AGENT Cursor/3.4

تُستخدم بواسطة open-sse/executors/base.ts::buildHeaders() عبر البحث الديناميكي. حدّث هذه القيم عندما يصدر المزوّدون إصدارات CLI جديدة — إذ تبدأ سلاسل UA القديمة بالتعرّض للرفض باعتبارها عملاء قديمين.

مفاتيح تبديل وضع توافق CLI (القسم 13 من .env.example)

المتغير التأثير
CLI_COMPAT_CODEX=1 بصمة Codex
CLI_COMPAT_CLAUDE=1 بصمة claude-cli
CLI_COMPAT_GITHUB=1 بصمة GitHub Copilot Chat
CLI_COMPAT_ANTIGRAVITY=1 بصمة Antigravity
CLI_COMPAT_KIRO=1 Kiro
CLI_COMPAT_CURSOR=1 Cursor
CLI_COMPAT_KIMI_CODING=1 Kimi Coding
CLI_COMPAT_KILOCODE=1 KiloCode
CLI_COMPAT_CLINE=1 Cline
CLI_COMPAT_ALL=1 تمكين كل ما سبق

يُحتفَظ بعنوان IP الخاص بالمزوّد دائمًا — إذ لا يفعل مفتاح التبديل سوى إعادة تشكيل البصمة الشبكية للطلب، ولا يغيّر عنوان IP للخروج.


تنقية الترويسات الواردة

ينقّي OmniRoute ترويسات العميل الواردة قبل تمريرها، بحيث لا يؤدي وصول طلب من Cursor إلى تسريب User-Agent: Cursor/X.Y.Z إلى خدمة Claude علوية. راجع src/shared/constants/upstreamHeaders.ts للاطلاع على قائمة الحظر، التي تُحافَظ على مزامنتها بدقة مع مخططات Zod واختبارات الوحدات.


تحديث البصمات عندما يغيّرها المزوّد

  1. التقط حركة مرور CLI الرسمية باستخدام mitmproxy (اعتراض TLS + تفريغ)
  2. استخرج JA3/JA4 والترتيب الحرفي للترويسات
  3. حدّث إدخال CLI_FINGERPRINTS[...] ذي الصلة
  4. حدّث القيمة الافتراضية المطابقة لـ *_USER_AGENT في .env.example
  5. إذا تغيّرت مصافحة TLS نفسها، فحدّث غلاف المزوّد ذي الصلة أو خيار browser: في wreq-js
  6. شغّل اختبارات TLS الخاصة بالمزوّد واختبار كناري يدويًا مقابل المزوّد الفعلي
  7. انشر ضمن إصدار تصحيحي؛ ووثّق ذلك في CHANGELOG.md

الاختبارات

  • open-sse/services/__tests__/claudeTlsClient.test.ts — سلوك غلاف TLS المشترك
  • tests/unit/anthropic-cache-fingerprint.test.ts — حتمية البصمة
  • tests/unit/chatgpt-web-source-retirement.test.ts — يظل مصدر التخفي المشترك لـ ChatGPT Web غائبًا، بينما يظل Codex Web موجودًا

انظر أيضًا