تخطَّ إلى المحتوى

إعادة توجيه المنافذ من طرفية

الخادم الذي تشغّله في طرفية المحادثة لا يُنشر إلا لتلك المساحة. ترصد لوحة المنافذ المستمعين الذين شغّلهم هذا التطبيق هناك، وتعيّنهم، وتعطيك عنوانًا لكل موضع قد تريد الوصول إليهم منه. قد تستمع مساحتان معًا على 5173، من غير أن تختلط خريطتاهما.

لا شيء هنا يفتح الآلة: كل مسار ينشئه الخادم عند الطلب، ويزول مع الطرفية أو المنصة.

  1. افتح الطرفية (VM) الخاصة بالمحادثة، أو صدفة المضيف (في مساحة أو في صفحة طلب سحب).
  2. شغّل خادمك — pnpm dev، أو python -m http.server 8000، أو أي شيء آخر.
  3. خلال بضع ثوانٍ تظهر نقطة على أيقونة القابس في الزاوية العلوية اليسرى من الطرفية. انقرها.

تسرد اللوحة كل منفذ يستمع، مع العملية التي تملكه، على صورة 3000 → 3000: المنفذ الذي ربطته العملية على اليسار، والمنفذ الذي يجيب عليه محليًا على اليمين (الرقم نفسه كلما كان شاغرًا على جهازك). ويبيّن كل صف أيضًا إن كان الوصول ممكنًا من localhost على جهازك، ومن المتصفح (VM)، ومن Android.

الاكتشاف محصور: تُستطلَع الطرفية (VM) من داخل ذلك الضيف، وتُستطلَع صدفة المضيف من شجرة عمليات PTY الخاصة بتلك الجلسة. المساحات الأخرى، والعمليات الأخرى على جهاز Mac، لا تُدرَج.

المنافذ الجديدة في هذه الطرفية تُعاد توجيهها تلقائيًا. عطّل إعادة توجيه المنافذ تلقائيًا في اللوحة نفسها إن أردت الاكتفاء بالمنافذ التي تضيفها أنت.

استخدم نسخ عنوان URL المحلي في الصف — http://localhost:3000. يصغي التوجيه على الاسترجاع فقط، فلا يراه شيء آخر على شبكتك.

إن كشفت مساحتان منفذ الضيف 5173 وكان 127.0.0.1:5173 محجوزًا على جهازك أصلًا، تحتفظ المساحة الثانية بمنفذ الضيف 5173 وتحصل على منفذ محلي مؤقت. يستخدم نسخ عنوان URL الرقم الأيمن.

على صدفة المضيف، العملية على جهازك أصلًا. تعيين المنفذ المحلي نفسه لا يفعل شيئًا، واختيار منفذ محلي مختلف يربط وسيط استرجاع بالمنفذ الذي اخترته.

لا يجعل --host (أو الربط على 0.0.0.0) المتصفح (VM) المعزول قادرًا على بلوغ خادم على جهاز Mac. للضيف استرجاعه الخاص، وينشئ الخادم نفقًا داخل ذلك الضيف حين يكون لسان المتصفح في المساحة نفسها.

افتح المتصفح المعزول في المحادثة نفسها. اكتب localhost:<left-hand port> — الرقم الذي ربطته العملية. التحويل (5173 → 3000) يجيب أيضًا على الرقم الأيمن في ذلك المتصفح، فيعمل نسخ عنوان URL هناك أيضًا. ويستطيع browser_use لدى الوكيل أن ينتقل إلى أي منهما. لا يظهر خادم المساحة A أبدًا بعنوان localhost:5173 في متصفح المساحة B.

استخدم localhost، لا عنوان IP على الشبكة المحلية ولا --host. للضيف استرجاعه الخاص، ويصغي النفق هناك على IPv4 وIPv6 معًا.

الصفحات التي تفتح اتصالات كثيرة دفعة واحدة (عشرات الأصول، ومقبس إعادة تحميل حي) تشترك في النفق نفسه. يجمّعها المتصفح (VM) على تنفيذ exec دائم واحد، فلا تكون دفعة الجلب عملية جديدة لكل اتصال، ولا تنتهي المهلة بصفحة بيضاء.

داخل المساحة الواحدة، يغلب توجيه الطرفية (VM) صدفة المضيف على الرقم نفسه. بين المساحات لا أولوية — فالخرائط منفصلة.

افتح لسان Android لتلك المساحة. يُعكس عندئذٍ localhost:<port> في المحاكي إلى المنفذ المنشور لهذه المساحة (adb reverse). المحاكي واحد وعلى مستوى الجهاز: ربط المساحة B يعيد توجيه :5173 إلى B ويُسقط ما للمساحة A. أغلق اللسان فتُزال عمليات العكس التي أنشأتها هذه المنصة.

محاكي iOS هو جهاز Mac أصلًا — بلا عكس. جهاز iPhone الفعلي ما زال يحتاج مشاركة على الشبكة المحلية.

⋯ ← المشاركة على الشبكة المحلية ينشر المنفذ على <server-ip>:<random port> — ويفيد ذلك لفتح الصفحة على هاتفك، أو حين يعمل الخادم على جهاز آخر.

  • منفذ الشبكة المحلية يعيّنه نظام التشغيل دائمًا، ولا يكون أبدًا رقم الضيف، فيكون العنوان المكشوف مقصودًا وظاهرًا، لا عنوانًا يمكن تخمينه.
  • يبقى خاصًا (على الاسترجاع فقط) إلى أن تبدّله، و**⋯ ← محلي فقط** يعيده خارج الشبكة.

⋯ ← تعيين نطاق للمتصفح (.test) يمنح المنفذ نطاق تطوير مثل myapp.test. داخل المتصفح (VM)، يحمّل https://myapp.test خادمك بقفل صالح — وهذا ينفع كل ما يتغيّر سلوكه مع أصل مسمّى أو سياق آمن (ملفات تعريف الارتباط، وعمال الخدمة، وردود نداء OAuth).

  • يجب أن ينتهي النطاق بـ .test أو .localhost — وهما نطاقا المستوى الأعلى المحجوزان للتطوير، فلا يمكن لاسم تطوير أن يحجب موقعًا حقيقيًا.
  • أسماء النطاقات فريدة على الخادم، وأرقام المنافذ ليست كذلك. يجوز لمساحتين أن تستخدما 5173، ولا يجوز لهما المطالبة معًا بـ myapp.test.
  • تأتي الشهادة من مرجع محلي يُصدره خادمك أول مرة يُحتاج فيها. تعيش مفاتيحه تحت دليل بيانات الخادم ولا تدخل أي ضيف، ويثق المتصفح المعزول بذلك المفتاح وحده، فيبقى التحقق من TLS نحو الإنترنت الحقيقي على حاله.
  • يُحلّ النطاق داخل المتصفح (VM) فقط. متصفحك على المضيف يستخدم localhost:<port> بدلًا منه.
  • يعمل http://myapp.test العادي أيضًا.

إضافة منفذ في أسفل اللوحة يعيّن منفذًا قبل أن يستمع إليه شيء، وسواء استمع شيء أم لا. يحتفظ التوجيه اليدوي بعنوانه أثناء إعادة تشغيل خادمك — ويُظهر الصف لا يستمع إلى أن يعود — أما التوجيه التلقائي فيختفي حين يختفي منفذه. وعلى صدفة المضيف يمكنك أيضًا تعيين منفذ محلي مختلف.

مفتاح المنافذ هو مساحة العمل والمساحة. خريطة منافذ مراقب الأجهزة الافتراضية ثابتة عند إقلاع الآلة، فتسلك الطرفية (VM) قناتين ضيقتين يسيطر عليهما الخادم: ممرًا واردًا مُنشأً سلفًا إلى الضيف يرفض الاتصال بأي منفذ لا يستمع إليه الضيف فعلًا، وأنفاقًا عكسية يبقيها الخادم مفتوحة للمتصفح (VM) وAndroid. صدفة المضيف لا تمسح الجهاز كله. لا يُنشأ داخل ضيف مستمع لم يضعه الخادم هناك، ويُفكَّك كل شيء مع الطرفية أو المنصة. التصميم مشروح في المنصات والحاويات المعزولة؛ وتفصيل المنافذ المحجوزة وقواعد النطاقات في مرجع المنصات.