إذن الوصول إلى الشبكة المحلية

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

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

التأثير

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

ستتأثر التطبيقات إذا كانت تصل إلى الشبكة المحلية للمستخدم باستخدام:

  • الاستخدام المباشر أو استخدام المكتبة لمقابس البيانات الأولية على عناوين الشبكة المحلية، مثل Multicast DNS (mDNS) أو Simple Service Discovery Protocol (SSDP)
  • استخدام فئات على مستوى إطار العمل يمكنها الوصول إلى الشبكة المحلية، مثل NsdManager

تفاصيل التأثير

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

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

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

استثناءات للقواعد السابقة:

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

إرشادات

لإيقاف الوصول إلى الشبكة المحلية، اتّبِع الخطوات التالية:

  1. تثبيت الإصدار التجريبي 3 أو إصدار أحدث من Android 16 على جهازك
  2. تثبيت التطبيق المطلوب اختباره
  3. تبديل إعدادات Appcompat باستخدام adb

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. أعِد تشغيل الجهاز

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

لاستعادة إمكانية الوصول، يجب منح تطبيقك الإذن بالوصول إلى NEARBY_WIFI_DEVICES.

  • تأكَّد من أنّ التطبيق يوضّح إذن NEARBY_WIFI_DEVICES في manifest.
  • انتقِل إلى الإعدادات > التطبيقات > [اسم التطبيق] > الأذونات > الأجهزة القريبة > السماح

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

الإذن Outbound LAN Request طلب الإنترنت الصادر/الوارد طلب شبكة LAN وارد
تم منح الأذونات Works Works Works
لم يتم المنح الإخفاقات Works الإخفاقات

استخدِم الأمر التالي لإيقاف إعدادات Appcompat:

adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>

الأخطاء

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

أمثلة على الأخطاء:

sendto failed: EPERM (Operation not permitted)

sendto failed: ECONNABORTED (Operation not permitted)

Bugs

إرسال الأخطاء والملاحظات بشأن:

  • التناقضات في الوصول إلى الشبكة المحلية (لا تعتقد أنّه يجب اعتبار وصول معيّن "وصولاً إلى الشبكة المحلية")
  • الأخطاء التي يجب فيها حظر الوصول إلى الشبكة المحلية ولكن لا يتم ذلك
  • الأخطاء التي يتم فيها حظر الوصول إلى الشبكة المحلية على الرغم من عدم وجوب ذلك

لن تتأثر العناصر التالية بهذا التغيير:

  • الوصول إلى الإنترنت
  • شبكة الجوّال