مجوز شبکه محلی

دستگاه‌های موجود در شبکه LAN توسط هر برنامه‌ای که مجوز INTERNET را دارد قابل دسترسی است. این امر اتصال برنامه‌ها به دستگاه‌های محلی را آسان می‌کند، اما پیامدهای حریم خصوصی مانند تشکیل اثر انگشت کاربر و پروکسی بودن مکان را نیز به همراه دارد.

پروژه Local Network Protections با هدف حفاظت از حریم خصوصی کاربر با دسترسی به شبکه محلی در پشت مجوز زمان اجرا جدید.

تاثیر

در طول Android 16، این مجوز یک ویژگی Opt-in است که به این معنی است که فقط برنامه هایی که انتخاب می کنند تحت تأثیر قرار می گیرند. هدف از انتخاب این است که توسعه دهندگان برنامه بفهمند کدام بخش از برنامه آنها به دسترسی ضمنی به شبکه محلی وابسته است به طوری که می توانند برای محافظت از آنها در نسخه آینده اندروید آماده شوند.

اگر برنامه‌ها با استفاده از موارد زیر به شبکه محلی کاربر دسترسی پیدا کنند تحت تأثیر قرار می‌گیرند.

  • استفاده مستقیم یا کتابخانه ای از سوکت های خام در آدرس های شبکه محلی (مثلاً پروتکل کشف سرویس mDNS یا SSDP)
  • استفاده از کلاس های سطح چارچوب که به شبکه محلی دسترسی دارند (مانند NsdManager)

جزئیات تاثیر

ترافیک به و از یک آدرس شبکه محلی نیاز به مجوز دسترسی به شبکه محلی دارد. جدول زیر برخی از موارد رایج را فهرست می کند:

عملکرد شبکه سطح پایین برنامه مجوز شبکه محلی مورد نیاز است
ایجاد یک اتصال TCP خروجی بله
پذیرش اتصال TCP ورودی بله
ارسال UDP unicast، multicast، پخش بله
دریافت یک UDP ورودی، پخش، چندپخشی، پخش بله

این محدودیت‌ها در اعماق پشته شبکه پیاده‌سازی می‌شوند و بنابراین برای همه APIهای شبکه اعمال می‌شوند. این شامل سوکت های ایجاد شده در پلتفرم یا کدهای مدیریت شده، کتابخانه های شبکه مانند Cronet و OkHttp و هر APIهایی است که در بالای آن ها پیاده سازی شده اند. تلاش برای حل و فصل سرویس‌ها در شبکه محلی (یعنی آنهایی که پسوند .local دارند) به مجوز شبکه محلی نیاز دارد.

استثنائات قوانین قبلی:

  • اگر سرور DNS دستگاه در یک شبکه محلی است، ترافیک به / از آن (در پورت 53) به مجوز دسترسی به شبکه محلی نیاز ندارد.
  • برنامه‌هایی که از Output Switcher به‌عنوان انتخابگر درون‌برنامه خود استفاده می‌کنند، به مجوزهای شبکه محلی نیاز ندارند (راهنمای بیشتری در نسخه بعدی ارائه خواهد شد).

راهنمایی

برای انتخاب محدودیت های شبکه محلی، موارد زیر را انجام دهید:

  1. دستگاه خود را روی یک بیلد با Android 16 Beta 3 یا جدیدتر فلش کنید
  2. برنامه را برای تست نصب کنید
  3. تنظیمات Appcompat را با استفاده از adb تغییر دهید

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. دستگاه را راه اندازی مجدد کنید

اکنون دسترسی برنامه شما به شبکه محلی محدود شده است و هرگونه تلاش برای دسترسی به شبکه محلی منجر به خطاهای سوکت می شود. اگر از APIهایی استفاده می‌کنید که عملیات شبکه محلی را خارج از فرآیند برنامه شما انجام می‌دهند (مثلاً: NsdManager)، در طول انتخاب کردن تحت تأثیر قرار نخواهند گرفت.

برای بازیابی دسترسی، باید به برنامه خود مجوز NEARBY_WIFI_DEVICES بدهید.

  • مطمئن شوید که برنامه مجوز NEARBY_WIFI_DEVICES را در مانیفست خود اعلام کرده است.
  • به تنظیمات > برنامه‌ها > [نام برنامه] > مجوزها > دستگاه‌های نزدیک > مجاز بروید

اکنون دسترسی برنامه شما به شبکه محلی باید بازیابی شود و همه سناریوهای شما باید مانند قبل از انتخاب برنامه کار کنند. در اینجا نحوه تأثیرگذاری بر ترافیک شبکه برنامه آمده است.

اجازه درخواست LAN خروجی درخواست اینترنت خروجی/ورودی درخواست LAN ورودی
داده شده است کار می کند کار می کند کار می کند
داده نشده است شکست می خورد کار می کند شکست می خورد

از دستور زیر برای غیرفعال کردن تنظیمات 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)

اشکالات

ارسال اشکالات و بازخورد برای:

  • اختلاف در دسترسی به LAN (به نظر شما یک دسترسی خاص نباید دسترسی "شبکه محلی" در نظر گرفته شود)
  • اشکالاتی که در آنها دسترسی LAN باید مسدود شود اما اینطور نیست
  • اشکالاتی که در آنها دسترسی به LAN نباید مسدود شود اما مسدود شده است

موارد زیر باید تحت تأثیر این تغییر قرار نگیرد:

  • دسترسی به اینترنت
  • شبکه موبایل