يبدأ تطبيق الهاتف والخادم البعيد بوقائع مختلفة، ولا يستطيع أيٌّ منهما استعارة وقائع الآخر. يستطيع التطبيق أن يسأل نظام التشغيل عن الشبكة التي يستخدمها، بينما لا يعرف الخادم إلا ما يصل عبر الاتصال. تشغيل نقطة نهاية خاصة بك يعيد كتابة الثاني ويترك الأول دون تغيير. وأيُّهما يجيب عن سؤالك يتوقف على السؤال نفسه.

نقطتا رصد ونوعان من الدليل

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

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

قبل الجدال حول الكشف، اكتب أي نقطة تخصّها المسألة. هل المسألة هي ما إذا كان تطبيق معيّن يستطيع معرفة أن نفقًا نشط، أم ما إذا كانت خدمة تستطيع استنتاج مصدر الطلب؟ هذان بحثان منفصلان، والجواب عن أحدهما لا يقول شيئًا عن الآخر.

ما يمكن أن تبلّغ عنه واجهة النظام الأساسي المحلية

يوفّر Android علامة محددة. ويمكن لكائن NetworkCapabilities أن يبلّغ عن TRANSPORT_VPN، بينما hasTransport يفحص ما إذا كان ذلك النقل موجودًا على الكائن. ويحصل التطبيق على الكائن من خدمة الاتصال ويقرأه، وفقًا لإذن حالة الشبكة.

النتيجة معلومات محلية من النظام الأساسي، وليست بحثًا في نطاقات عناوين مزوّد. وهي تصف الشبكة التي يستخدمها التطبيق المتصل.

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

adb shell dumpsys connectivity | grep -i -m5 vpn

ما يمكن أن تراه خدمة بعيدة

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

العنوان المسجّل لدى مزوّد استضافة يوحي بنفق، بينما العنوان المسجّل لدى شبكة سكنية يوحي باتصال منزلي. وكلاهما إشارة إحصائية، لا واقعة عن الجهاز.

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

الدليلعمّا يجيبما لا يستطيع إظهاره
علامة النقل المحليةهل هذا الكائن الشبكي شبكة VPNمن يدير الخروج أو أين الجهاز
عنوان المصدر البعيدأي عنوان وصل إلى الخدمةهل يحمل الجهاز نفقًا أيضًا
حِمل التطبيقما اختار التطبيق إرسالهأي شيء لم يرسله التطبيق

لماذا يغيّر الخروج المستضاف ذاتيًا جانبًا واحدًا فقط

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

جانب من الدليل يتحرك، والآخر يبقى ثابتًا. والفجوة بينهما هي موضع انكسار التوقعات.

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

قرّر بالسؤال الذي تطرحه

إذا كان السؤال هو ما إذا كان تطبيق معيّن يستطيع رصد حالة النفق، فإن واجهة النظام الأساسي هي الموضع الصحيح للنظر، والجواب موجود في شيفرة ذلك التطبيق وأذوناته. وإذا كان السؤال هو ما يمكن أن تستنتجه خدمة، فبيانات الاتصال الوصفية هي الدليل. أما المسألة القانونية أو التعاقدية فلا يحسمها أيٌّ منهما.

سمِّ السؤال في جملة واحدة قبل جمع أي شيء. تلك الجملة تحدّد نقطة الرصد المهمة وتمنع البحث من الانحراف إلى جدال آخر.

صنِّف كل رصد بحسب مصدره عندما تبلّغ عنه، لأن ادعاءً بلا تصنيف لا يمكن مراجعته. فالعلامة المحلية واستنتاج العنوان كلاهما مفيد ولا أحدهما قاطع، ولهذا فإن دمجهما في حكم واحد خطأ.

عندما ترفض خدمة اتصالًا مصرّحًا به، استخدم مسار المراجعة الذي تدعمه بدل تغيير إعداد محلي لإخفاء إشارة. فإزالة رصد واحد لا تثبت أبدًا أن الآخرين اختفوا.

مقالات ذات صلة