স্থানীয় নেটওয়ার্ক অনুমতি

লোকাল এরিয়া নেটওয়ার্ক (LAN) এর ডিভাইসগুলিতে INTERNET অনুমতি থাকা যেকোনো অ্যাপ ব্যবহার করতে পারে। এটি অ্যাপগুলিকে স্থানীয় ডিভাইসের সাথে সংযোগ করা সহজ করে তোলে, তবে ব্যবহারকারীর আঙুলের ছাপ তৈরি করা এবং অবস্থানের জন্য প্রক্সি হওয়ার মতো গোপনীয়তার প্রভাবও বহন করে।

লোকাল নেটওয়ার্ক প্রোটেকশনস প্রকল্পের লক্ষ্য হল একটি নতুন রানটাইম অনুমতির মাধ্যমে লোকাল নেটওয়ার্কে অ্যাক্সেস প্রদানের মাধ্যমে ব্যবহারকারীর গোপনীয়তা রক্ষা করা।

প্রভাব

অ্যান্ড্রয়েড ১৬-এর সময়, এই অনুমতিটি একটি অপ্ট-ইন বৈশিষ্ট্য যার অর্থ শুধুমাত্র অপ্ট-ইন করা অ্যাপগুলিই প্রভাবিত হবে। অপ্ট-ইনের লক্ষ্য হল অ্যাপ ডেভেলপারদের বোঝানো যে তাদের অ্যাপের কোন অংশগুলি অন্তর্নিহিত স্থানীয় নেটওয়ার্ক অ্যাক্সেসের উপর নির্ভর করে যাতে তারা ভবিষ্যতের অ্যান্ড্রয়েড রিলিজে তাদের রক্ষা করার অনুমতির জন্য প্রস্তুত হতে পারে।

নিম্নলিখিত ব্যবহার করে ব্যবহারকারীর স্থানীয় নেটওয়ার্ক অ্যাক্সেস করলে অ্যাপগুলি প্রভাবিত হবে:

  • স্থানীয় নেটওয়ার্ক ঠিকানাগুলিতে কাঁচা সকেটের সরাসরি বা লাইব্রেরি ব্যবহার, উদাহরণস্বরূপ, Multicast DNS (mDNS) বা Simple Service Discovery Protocol (SSDP)
  • স্থানীয় নেটওয়ার্ক অ্যাক্সেস করে এমন ফ্রেমওয়ার্ক-স্তরের ক্লাসের ব্যবহার, উদাহরণস্বরূপ, NsdManager

প্রভাবের বিবরণ

স্থানীয় নেটওয়ার্ক ঠিকানায় এবং সেখান থেকে ট্র্যাফিকের জন্য স্থানীয় নেটওয়ার্ক অ্যাক্সেসের অনুমতি প্রয়োজন। নিম্নলিখিত টেবিলে কিছু সাধারণ ঘটনা তালিকাভুক্ত করা হয়েছে:

অ্যাপ লো লেভেল নেটওয়ার্ক অপারেশন স্থানীয় নেটওয়ার্কের অনুমতি প্রয়োজন
একটি বহির্গামী TCP সংযোগ তৈরি করা হচ্ছে হ্যাঁ
একটি আগত TCP সংযোগ গ্রহণ করা হচ্ছে হ্যাঁ
একটি UDP ইউনিকাস্ট, মাল্টিকাস্ট, সম্প্রচার পাঠানো হচ্ছে হ্যাঁ
একটি আগত UDP ইউনিকাস্ট, মাল্টিকাস্ট, সম্প্রচার গ্রহণ করা হচ্ছে হ্যাঁ

এই বিধিনিষেধগুলি নেটওয়ার্কিং স্ট্যাকের গভীরে প্রয়োগ করা হয় এবং তাই এগুলি সমস্ত নেটওয়ার্কিং API-এর ক্ষেত্রে প্রযোজ্য। এর মধ্যে রয়েছে প্ল্যাটফর্মে তৈরি সকেট বা পরিচালিত কোড, Cronet এবং OkHttp-এর মতো নেটওয়ার্কিং লাইব্রেরি এবং এর উপরে প্রয়োগ করা যেকোনো API। স্থানীয় নেটওয়ার্কে .local সাফিক্স আছে এমন পরিষেবাগুলি সমাধান করার চেষ্টা করার জন্য স্থানীয় নেটওয়ার্কের অনুমতি প্রয়োজন।

পূর্ববর্তী নিয়মের ব্যতিক্রম:

  • যদি কোনও ডিভাইসের DNS সার্ভার স্থানীয় নেটওয়ার্কে থাকে, তাহলে (পোর্ট ৫৩-এ) সেখান থেকে/থেকে ট্র্যাফিকের জন্য স্থানীয় নেটওয়ার্ক অ্যাক্সেসের অনুমতির প্রয়োজন হয় না।
  • যেসব অ্যাপ্লিকেশন আউটপুট সুইচারকে তাদের ইন-অ্যাপ পিকার হিসেবে ব্যবহার করে, তাদের স্থানীয় নেটওয়ার্ক অনুমতির প্রয়োজন হবে না (আরও নির্দেশিকা পরবর্তী প্রকাশে আসবে)।

অ্যান্ড্রয়েড ১৭ এনফোর্সমেন্ট

অ্যান্ড্রয়েড ১৭ থেকে শুরু করে, স্থানীয় নেটওয়ার্ক সুরক্ষা বাধ্যতামূলক এবং অ্যান্ড্রয়েড ১৭ বা তার উচ্চতর ভার্সনকে লক্ষ্য করে তৈরি অ্যাপগুলির জন্য প্রয়োগ করা হয়।

দিক অ্যান্ড্রয়েড ১৬ অ্যান্ড্রয়েড ১৭
টার্গেট SDK ৩৬ ৩৭ বা তার বেশি
অনুমতি অস্থায়ীভাবে ব্যবহৃত NEARBY_WIFI_DEVICES অ্যাক্সেস_লোকাল_নেটওয়ার্ক
ডিফল্ট অ্যাক্সেস স্থানীয় নেটওয়ার্ক অ্যাক্সেস খোলা আছে যেসব অ্যাপ তাদের টার্গেট SDK আপডেট করে, তাদের জন্য স্থানীয় নেটওয়ার্ক ডিফল্টরূপে ব্লক করা থাকে।
অনুমতি গ্রুপ বিদ্যমান NEARBY_DEVICES অনুমতি গোষ্ঠীর অংশ

এনফোর্সমেন্টের পরে অ্যাপের কার্যকারিতা ব্যাহত হয়েছে কিনা তা যাচাই করার জন্য, SDK 37 বা উচ্চতর সংস্করণকে লক্ষ্য করে অ্যাপ্লিকেশনগুলিকে স্থানীয় নেটওয়ার্ক অ্যাক্সেস পরিচালনা করার জন্য নিম্নলিখিত পথগুলির মধ্যে একটি গ্রহণ করতে হবে:

পথ A: গোপনীয়তা-সংরক্ষণকারী পিকার ব্যবহার করা

সিস্টেম-মধ্যস্থতাকারী আবিষ্কার এবং সংযোগের কাজের জন্য, বিস্তৃত রানটাইম অনুমতির অনুরোধ সম্পূর্ণরূপে এড়াতে পিকার ব্যবহার করুন। আপনার ব্যবহারের ক্ষেত্রের উপর ভিত্তি করে নিম্নলিখিত পিকারগুলি ব্যবহার করুন:

  • মিডিয়া স্ট্রিমিং: গুগল কাস্ট সমর্থনকারী অ্যাপ্লিকেশনগুলির জন্য তারা আউটপুট সুইচার বৈশিষ্ট্যটি ব্যবহার করতে পারে। এটি ডেভেলপারদের ব্যবহারকারীদের নির্দিষ্ট স্ট্রিমিং ডিভাইস নির্বাচন করার অনুমতি দেয় অ্যাপটিকে বিস্তৃত ACCESS_LOCAL_NETWORK অনুমতির অনুরোধ না করেই।
  • সাধারণ সংযোগ: NsdManager এ mDNS আবিষ্কারের জন্য একটি সিস্টেম-চালিত পরিষেবা পিকার রয়েছে। অ্যাপটি পুরো নেটওয়ার্ক স্ক্যান করার পরিবর্তে, সিস্টেমটি একটি ডায়ালগ প্রদর্শন করে যা ব্যবহারকারীকে অ্যাপটি অ্যাক্সেস করার জন্য একটি একক ডিভাইস নির্বাচন করার অনুমতি দেয়।
val discoveryRequest = DiscoveryRequest.Builder("_http._tcp")
    .setFlags(DiscoveryRequest.FLAG_SHOW_PICKER)
    .build()

nsdManager.registerServiceInfoCallback(discoveryRequest, executor, object : NsdManager.ServiceInfoCallback {
    override fun onServiceUpdated(serviceInfo: NsdServiceInfo) {
        // Handle the user-selected and discovered service
        // NsdServiceInfo.getHostAddresses() can now be connected to
        // without ACCESS_LOCAL_NETWORK permission
    }
})

পথ B: রানটাইম অনুমতির অনুরোধ করা (বিস্তৃত অ্যাক্সেস)

হোম অটোমেশন বা আইওটি ডিভাইস পরিচালনার মতো জটিল ব্যবহারের ক্ষেত্রে এই পথটি প্রয়োজন, যেখানে স্থানীয় নেটওয়ার্কে বিস্তৃত, অবিরাম অ্যাক্সেস প্রয়োজন।

  • ম্যানিফেস্টে অনুমতি ঘোষণা করুন: ডেভেলপারদের অবশ্যই AndroidManifest.xmlACCESS_LOCAL_NETWORK স্পষ্টভাবে ঘোষণা করতে হবে।

  • রানটাইমে অনুমতির জন্য অনুরোধ করুন: যেকোনো স্থানীয় নেটওয়ার্ক অ্যাক্সেসের চেষ্টা করার আগে, অ্যাপ্লিকেশনগুলিকে অবশ্যই পরীক্ষা করতে হবে যে অনুমতি দেওয়া হয়েছে কিনা। যদি না হয়, তাহলে স্ট্যান্ডার্ড সিস্টেম প্রম্পটটি ট্রিগার করার জন্য তাদের Activity.requestPermission() কল করতে হবে।

  • পূর্ব-মঞ্জুরিপ্রাপ্ত পরিস্থিতি: ACCESS_LOCAL_NETWORK অনুমতিটি NEARBY_DEVICES অনুমতি গোষ্ঠীর অংশ। যদি কোনও ব্যবহারকারী ইতিমধ্যেই এই গোষ্ঠীতে অন্য কোনও অনুমতি (যেমন ব্লুটুথ অনুমতি) দিয়ে থাকেন, তাহলে স্থানীয় নেটওয়ার্ক অ্যাক্সেসের জন্য তাদের পুনরায় অনুরোধ করা হবে না।

  • অস্বীকৃতি এবং প্রত্যাহার পরিচালনা: ব্যবহারকারী যখন অনুরোধ প্রত্যাখ্যান করে অথবা পরে সিস্টেম সেটিংসে অনুমতি প্রত্যাহার করে, তখন অ্যাপগুলিকে অবশ্যই সুন্দরভাবে পরিচালনা করতে হবে। এই ধরনের পরিস্থিতিতে, স্থানীয় নেটওয়ার্ক ট্র্যাফিক ব্লক করা হবে।

অনুমতি অনুরোধ রিসেট কাউন্টার কৌশল

এই প্ল্যাটফর্মটি একটি কাউন্টার রিসেট কৌশল প্রয়োগ করে যা এমন পরিস্থিতি মোকাবেলা করে যেখানে কোনও অ্যাপের NEARBY_DEVICES অনুমতি গোষ্ঠী (যার মধ্যে এখন ACCESS_LOCAL_NETWORK অন্তর্ভুক্ত) এর পূর্বে অস্বীকার করার ফলে অ্যাপটি তার যুক্তি যথাযথভাবে উপস্থাপন করার পরেও অনুমতি চাইতে বাধা দেয়। এই প্রক্রিয়াটি অ্যাপটিকে requestPermission() API চালু করার জন্য অতিরিক্ত সুযোগ দেয়, কার্যকরভাবে ACCESS_LOCAL_NETWORK অনুমতির জন্য অস্বীকারের সংখ্যা পুনরায় সেট করে। এটি ব্যবহারকারীর সাথে আরও সূক্ষ্মভাবে পুনঃসংযোগের সুযোগ দেয়, বিশেষ করে যখন অ্যাপটি তার মূল কার্যকারিতার জন্য স্থানীয় নেটওয়ার্ক অ্যাক্সেসের প্রয়োজনীয়তা প্রকাশ করার আগে প্রাথমিক অস্বীকার ঘটে।

বিভক্ত অনুমতি মডেল

স্থানীয় নেটওয়ার্ক অনুমতি একটি বিভক্ত অনুমতি মাইগ্রেশন কৌশল ব্যবহার করে নতুন এবং লিগ্যাসি অ্যাপ্লিকেশনগুলিকে তাদের লক্ষ্য SDK এর উপর ভিত্তি করে ভিন্নভাবে পরিচালনা করে।

বিভাগ লক্ষ্য SDK স্তর স্থানীয় নেটওয়ার্ক অ্যাক্সেস আচরণ প্রয়োজনীয় ডেভেলপার পদক্ষেপ
নতুন অ্যাপ / আপডেট করা অ্যাপ >= ৩৭ (অ্যান্ড্রয়েড ১৭) ডিফল্টরূপে অবরুদ্ধ ACCESS_LOCAL_NETWORK রানটাইম অনুমতি ঘোষণা করুন এবং অনুরোধ করুন
লিগ্যাসি অ্যাপস < ৩৭ ইন্টারনেট অনুমতি সহ অ্যাপগুলি ACCESS_LOCAL_NETWORK এর জন্য একটি অন্তর্নিহিত অনুমতি মঞ্জুরি পায়, যা তাদের অ্যাক্সেস ধরে রাখার অনুমতি দেয়। এটি অস্থায়ী এবং অ্যাপটি লক্ষ্য SDK কে 37 এ উন্নীত করলে ডিফল্টরূপে ব্লক করা হবে। তাৎক্ষণিকভাবে কোড পরিবর্তনের প্রয়োজন নেই

ব্যবহারের ধরণ অনুসারে LNP কৌশল

  • কাস্টিং: মিডিয়া কাস্টিং কার্যকারিতার জন্য, সবচেয়ে উপযুক্ত এবং গোপনীয়তা-সংরক্ষণ কৌশল হল আউটপুট সুইচার ব্যবহার করা। এই পদ্ধতিটি সিস্টেমকে ব্যবহারকারীর পক্ষ থেকে স্থানীয় নেটওয়ার্ক আবিষ্কার এবং সংযোগ পরিচালনা করতে দেয়, যার ফলে অ্যাপটিকে ACCESS_LOCAL_NETWORK অনুমতির অনুরোধ করার প্রয়োজন হয় না।

  • ব্রাউজার: প্রোটোকলের উপর ভিত্তি করে ত্রুটিগুলি পরিচালনা করার জন্য বিভিন্ন পদ্ধতির প্রয়োজন হয়। UDP ত্রুটির ফলে EPERM ত্রুটি কোড তৈরি হয়। TCP সংযোগের জন্য, ব্রাউজারগুলিকে NDK API android_getnetworkblockedreason(int sockFd) ব্যবহার করে নির্ধারণ করা উচিত যে কোনও প্যাকেট LNP দ্বারা ব্লক করা হয়েছে কিনা এই API ANDROID_NETWORK_BLOCKED_REASON_LNP প্রদান করে।

  • অন্যান্য ব্যবহারের ক্ষেত্রে (যেমন, IoT): যেসব অ্যাপ্লিকেশন mDNS ব্যবহার করে ডিভাইস খুঁজে পায় তাদের android.net.nsd.DiscoveryRequest#FLAG_SHOW_PICKER ব্যবহার করা উচিত যা অনুমতি ছাড়াই ডিভাইস খুঁজে পেতে সাহায্য করে, এবং IP ঠিকানা পেতে NsdManager#registerServiceInfoCallback / NsdManager#resolveService ব্যবহার করা উচিত। এইভাবে প্রাপ্ত IP ঠিকানার সাথে সংযোগের জন্য ACCESS_LOCAL_NETWORK অনুমতির প্রয়োজন হয় না।

যেসব অ্যাপ্লিকেশনের জন্য সরাসরি স্থানীয় নেটওয়ার্ক যোগাযোগের প্রয়োজন হয় এবং সিস্টেম-মধ্যস্থতাকারী পিকার ব্যবহার করতে পারে না, তাদের জন্য প্রস্তাবিত পদ্ধতি হল অনুমতি রিসেট কাউন্টার কৌশল ব্যবহার করা। যদি ব্যবহারকারী ACCESS_LOCAL_NETWORK অনুমতি প্রত্যাহার করে, তাহলে এই প্রক্রিয়াটি অ্যাপটিকে পুনরায় অনুমতির অনুরোধ করার জন্য অতিরিক্ত সুযোগ প্রদান করে, যা ডেভেলপারদের ব্যবহারকারীর জন্য একটি স্পষ্ট যুক্তি উপস্থাপন করার সুযোগ দেয়।

অ্যান্ড্রয়েড ১৬ নির্দেশিকা

স্থানীয় নেটওয়ার্ক সীমাবদ্ধতা বেছে নিতে, নিম্নলিখিতগুলি করুন:

  1. আপনার ডিভাইসটিকে Android 16 Beta 3 বা তার পরবর্তী সংস্করণ সহ একটি বিল্ডে ফ্ল্যাশ করুন
  2. পরীক্ষা করার জন্য অ্যাপটি ইনস্টল করুন
  3. adb ব্যবহার করে Appcompat কনফিগারেশন টগল করুন।

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. ডিভাইসটি রিবুট করুন

এখন আপনার অ্যাপের স্থানীয় নেটওয়ার্কে অ্যাক্সেস সীমিত এবং স্থানীয় নেটওয়ার্ক অ্যাক্সেস করার যেকোনো প্রচেষ্টার ফলে সকেট ত্রুটি দেখা দেয়। যদি আপনি এমন API ব্যবহার করেন যা আপনার অ্যাপ প্রক্রিয়ার বাইরে স্থানীয় নেটওয়ার্ক ক্রিয়াকলাপ সম্পাদন করে (উদাহরণস্বরূপ, NsdManager ), তাহলে অপ্ট-ইনের সময় সেগুলি প্রভাবিত হবে না।

অ্যাক্সেস পুনরুদ্ধার করতে, আপনাকে অবশ্যই NEARBY_WIFI_DEVICES কে আপনার অ্যাপের অনুমতি দিতে হবে।

  • নিশ্চিত করুন যে অ্যাপটি তার manifest NEARBY_WIFI_DEVICES অনুমতি ঘোষণা করেছে।
  • সেটিংস > অ্যাপস > [অ্যাপের নাম] > অনুমতি > কাছাকাছি ডিভাইস > অনুমতি দিন এ যান

এখন আপনার অ্যাপের স্থানীয় নেটওয়ার্কে অ্যাক্সেস পুনরুদ্ধার করা উচিত এবং আপনার সমস্ত পরিস্থিতি অ্যাপটি নির্বাচন করার আগে যেমন কাজ করেছিল তেমনই কাজ করবে। অ্যাপ নেটওয়ার্ক ট্র্যাফিক কীভাবে প্রভাবিত হয় তা এখানে দেওয়া হল।

অনুমতি আউটবাউন্ড ল্যান অনুরোধ আউটবাউন্ড/ইনবাউন্ড ইন্টারনেট অনুরোধ ইনবাউন্ড ল্যান অনুরোধ
মঞ্জুর কাজ কাজ কাজ
অনুমোদিত নয় ব্যর্থতা কাজ ব্যর্থতা

Appcompat কনফিগারেশন টগল-অফ করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন

adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>

ত্রুটি

যদি অনুমতি না থাকার কারণে স্থানীয় নেটওয়ার্ক অ্যাক্সেসের অনুরোধ ব্যর্থ হয়:

  • TCP সংযোগের ফলে সাধারণত একটি টাইমআউট ত্রুটি দেখা দেয়।

  • UDP ত্রুটি এবং সাধারণ অনুমতি অস্বীকারের ফলে সাধারণত একটি EPERM ত্রুটি কোড তৈরি হবে।

বাগ

এর জন্য বাগ এবং প্রতিক্রিয়া জমা দিন :

  • ল্যান অ্যাক্সেসের ক্ষেত্রে অসঙ্গতি (আপনি মনে করেন না যে একটি নির্দিষ্ট অ্যাক্সেসকে "স্থানীয় নেটওয়ার্ক" অ্যাক্সেস হিসাবে বিবেচনা করা উচিত)
  • যেসব বাগের কারণে LAN অ্যাক্সেস ব্লক করা উচিত কিন্তু ব্লক করা হয়নি
  • যেসব বাগের কারণে LAN অ্যাক্সেস ব্লক করা উচিত নয় কিন্তু

এই পরিবর্তনের ফলে নিম্নলিখিত বিষয়গুলি প্রভাবিত না হওয়া উচিত:

  • ইন্টারনেট অ্যাক্সেস
  • মোবাইল নেটওয়ার্ক