নেটওয়ার্ক কার্যকলাপ লগিং

এই নথিটি ব্যাখ্যা করে কিভাবে একটি ডিভাইস পলিসি কন্ট্রোলার (DPC) নেটওয়ার্ক কার্যকলাপ লগ করে। কীভাবে আপনার DPC-তে নেটওয়ার্ক লগিং যোগ করবেন তা শিখতে পড়া চালিয়ে যান।

ওভারভিউ

লগিং নেটওয়ার্ক অ্যাক্টিভিটি এন্টারপ্রাইজগুলিকে তাদের ডিভাইসে ম্যালওয়ারের বিস্তার সনাক্ত করতে এবং ট্র্যাক করতে সাহায্য করতে পারে৷ সিস্টেম নেটওয়ার্কিং কল থেকে TCP সংযোগ এবং DNS লুকআপ রিপোর্ট করতে আপনার DPC নেটওয়ার্ক লগিং API কল করতে পারে।

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

প্রাপ্যতা

ডিভাইসের মালিকের জন্য Android 8 এবং উচ্চতর সংস্করণে নেটওয়ার্ক লগিং সমর্থিত। সক্রিয় থাকলে, এটি ডিভাইসের নেটওয়ার্ক কার্যকলাপের ডেটা সংগ্রহ করে। এটি একটি পরিচালিত প্রোফাইলের প্রোফাইল মালিক এবং DELEGATION_NETWORK_LOGGING- এর সাথে একটি অর্পিত অ্যাপের জন্য Android 12 এবং উচ্চতর সংস্করণে সমর্থিত। যখন নেটওয়ার্ক লগিং প্রোফাইল মালিক দ্বারা সক্ষম করা হয়, নেটওয়ার্ক লগগুলিতে শুধুমাত্র কাজের প্রোফাইল নেটওয়ার্ক কার্যকলাপ অন্তর্ভুক্ত থাকে এবং ব্যক্তিগত প্রোফাইল থেকে ডেটা সংগ্রহ করে না৷

আরও জানতে, অধিভুক্ত ব্যবহারকারী পড়ুন।

ইভেন্ট লগ

যখন নেটওয়ার্ক লগিং সক্রিয় থাকে, অ্যান্ড্রয়েড সিস্টেম নেটওয়ার্কিং লাইব্রেরি ব্যবহার করে অ্যাপ থেকে প্রতিটি ইভেন্ট রেকর্ড করে। নেটওয়ার্ক লগিং দুই ধরনের ইভেন্ট রেকর্ড করে:

  • DNS লুকআপ
  • নেটওয়ার্ক সংযোগ

DNS লুকআপ

নেটওয়ার্ক লগিং DNS লুকআপের জন্য একটি ইভেন্ট রেকর্ড করে যা সিস্টেম নেটওয়ার্ক অনুরোধের অংশ। লগগুলি প্রতিটি DNS অনুরোধ ক্যাপচার করে যা একটি IP ঠিকানায় একটি হোস্টনাম সমাধান করে৷ অন্যান্য সমর্থনকারী DNS প্রশ্ন, যেমন নাম সার্ভার আবিষ্কার, রেকর্ড করা হয় না।

নেটওয়ার্ক অ্যাক্টিভিটি লগিং এপিআই প্রতিটি DNS লুকআপকে একটি DnsEvent উদাহরণ হিসেবে উপস্থাপন করে। সারণি 1 একটি DnsEvent এ নথিভুক্ত ক্ষেত্র এবং সাধারণ মান বর্ণনা করে।

সারণি 1. DNS ইভেন্ট ক্ষেত্র

ডেটা উদাহরণ বর্ণনা
হোস্টনাম host.example.com DNS ক্যোয়ারীতে পাঠানো হোস্টনাম।
Inet ঠিকানা 203.0.113.9 , 198.51.100.25 IPv4 বা IPv6-এর একটি তালিকা হোস্টনামের জন্য সমাধান করা DNS ক্যোয়ারীকে অ্যাড্রেস করে। লগের আকার পরিচালনাযোগ্য রাখতে, ফলাফলে সমস্ত IP ঠিকানা অন্তর্ভুক্ত নাও হতে পারে—নিম্নলিখিত সারিতে ঠিকানা গণনা দেখুন।
ঠিকানা গণনা 4 DNS ক্যোয়ারী রেজোলিউশন থেকে ফিরে আসা IP ঠিকানার সংখ্যা। লগ করা IP ঠিকানাগুলি ফলাফলের একটি উপসেট কিনা তা খুঁজে বের করতে এটি ব্যবহার করুন৷ 0 (শূন্য) এর মান মানে হোস্টনামটি একটি IP ঠিকানার সমাধান করেনি।
প্যাকেজের নাম com.android.chrome অ্যাপটির প্যাকেজের নাম যা DNS কোয়েরি তৈরি করেছে।
টাইমস্ট্যাম্প 1506297600000 একটি টাইমস্ট্যাম্প রেকর্ডিং যখন DNS লুকআপ হয়েছিল। মান হল DNS লুকআপ এবং মধ্যরাত, জানুয়ারী 1, 1970 UTC-এর মধ্যে মিলিসেকেন্ডের ব্যবধান।
আইডি 25 একটি একঘেয়ে ক্রমবর্ধমান সংখ্যাসূচক আইডি। Android 9.0 (API স্তর 28) বা উচ্চতর সংস্করণে উপলব্ধ৷

যদিও DNS লুকআপগুলি IT অ্যাডমিনদের নেটওয়ার্ক সংযোগগুলি ট্র্যাক করতে সাহায্য করতে পারে, নেটওয়ার্ক লগিং একটি সাধারণ-উদ্দেশ্য DNS রেকর্ডিং সমাধান নয়৷ এখানে কিছু DNS কাজ রয়েছে যা একটি অ্যাপ করতে পারে যা লগ করা হয়নি:

  • একটি DNS নাম সার্ভারের সাথে সরাসরি যোগাযোগ করা।
  • DNS প্রশ্ন করতে একটি জাভা DNS লাইব্রেরি কল করা হচ্ছে।
  • একটি নির্দিষ্ট আইপি ঠিকানায় সংযোগ করে একটি DNS ক্যোয়ারী এড়িয়ে যাওয়া।

নেটওয়ার্ক সংযোগ

নেটওয়ার্ক লগিং প্রতিটি প্রচেষ্টা করা সংযোগের জন্য একটি ইভেন্ট রেকর্ড করে যা একটি সিস্টেম নেটওয়ার্ক অনুরোধের অংশ। লগগুলি সফল এবং ব্যর্থ TCP সংযোগগুলি ক্যাপচার করে — UDP স্থানান্তরগুলি রেকর্ড করা হয় না৷

নেটওয়ার্ক অ্যাক্টিভিটি লগিং API প্রতিটি সংযোগকে একটি ConnectEvent উদাহরণ হিসেবে উপস্থাপন করে। সারণি 2 একটি ConnectEvent এ রেকর্ড করা ক্ষেত্র এবং সাধারণ মান বর্ণনা করে।

সারণি 2. ইভেন্ট ক্ষেত্র সংযুক্ত করুন

ডেটা উদাহরণ বর্ণনা
Inet ঠিকানা 2001:db8::2f:abc:0 আইপি অ্যাড্রেসের সাথে সংযুক্ত ডিভাইস। এটি একটি IPv4 বা একটি IPv6 ঠিকানা হতে পারে৷
বন্দর 80 টিসিপি পোর্ট নম্বর ডিভাইসটি সংযুক্ত।
প্যাকেজের নাম com.android.chrome সংযুক্ত অ্যাপের প্যাকেজের নাম।
টাইমস্ট্যাম্প 1506297600000 নেটওয়ার্ক সংযোগ ঘটলে একটি টাইমস্ট্যাম্প রেকর্ডিং। মান হল সংযোগ এবং মধ্যরাতের মধ্যে মিলিসেকেন্ডের ব্যবধান, জানুয়ারী 1, 1970 UTC।
আইডি 26 একটি একঘেয়ে ক্রমবর্ধমান সংখ্যাসূচক আইডি। Android 9.0 (API স্তর 28) বা উচ্চতর সংস্করণে উপলব্ধ৷

নেটওয়ার্ক লগিং একটি ইভেন্ট রেকর্ড করে যখন একটি অ্যাপ স্ট্যান্ডার্ড নেটওয়ার্ক লাইব্রেরি, যেমন অ্যান্ড্রয়েডের অন্তর্নির্মিত API বা জনপ্রিয় তৃতীয় পক্ষের লাইব্রেরিগুলিকে একটি হোস্টের সাথে সংযোগ করতে কল করে। যোগাযোগের জন্য সরাসরি অ্যাপ প্রদানকারী সিস্টেম কল লগ করা হয় না। মনে রাখবেন, UDP নেটওয়ার্কিং লগ করা নেই তাই কিছু মিডিয়া স্ট্রিমিং, মেসেজিং, এবং গেমিং অ্যাপ লগগুলিতে প্রদর্শিত নাও হতে পারে৷

ব্যবহারকারীদের অবহিত করুন

সিস্টেম ডিভাইস ব্যবহারকারীদের সতর্ক করে যে নেটওয়ার্ক কার্যকলাপ লগিং সক্রিয় আছে। ব্যবহারকারীরা ইন্টারফেসে নিম্নলিখিত সতর্কতাগুলি দেখতে পান:

  • ডিভাইস ম্যানেজমেন্ট ডায়ালগের একটি বিভাগ যা আপনার DPC ব্যাখ্যা করছে নেটওয়ার্ক ট্র্যাফিক পর্যবেক্ষণ করছে। ব্যবহারকারীরা দ্রুত সেটিংসে পরিচালিত ডিভাইসের তথ্য লেবেলে ট্যাপ করে ডায়ালগটি দেখতে পান।
  • ব্যবহারকারী নেটওয়ার্ক লগিংয়ে নতুন থাকাকালীন একটি বাতিলযোগ্য সিস্টেম বিজ্ঞপ্তি দেখানো হয়েছে। বিজ্ঞপ্তিটি আলতো চাপলে একটি নেটওয়ার্ক পর্যবেক্ষণ বিভাগে আরও ব্যাখ্যা সহ ডিভাইস মনিটরিং ডায়ালগ দেখায়। আপনার DPC নেটওয়ার্ক লগিং নিষ্ক্রিয় করলে বিজ্ঞপ্তিটি অদৃশ্য হয়ে যায়।

আপনার DPC-তে নেটওয়ার্ক লগিং যোগ করুন

IT অ্যাডমিনদের নেটওয়ার্ক লগ পর্যালোচনা করতে সাহায্য করার জন্য, আপনার DPC-কে নিম্নলিখিত কাজগুলি সম্পূর্ণ করতে সক্ষম হতে হবে:

  • নেটওয়ার্ক লগিং চালু এবং বন্ধ করুন।
  • একটি নতুন ব্যাচ প্রস্তুত হলে কোনো রেকর্ড করা লগ পুনরুদ্ধার করুন।
  • একটি সার্ভারে লগগুলিতে দরকারী ডেটা পাঠান।

প্রয়োজনীয়তা

নেটওয়ার্ক লগিং ডিভাইসের মালিকের জন্য Android 8.0 (API লেভেল 26) বা উচ্চতর এবং একটি পরিচালিত প্রোফাইলের প্রোফাইল মালিকের জন্য Android 12 (API স্তর 31) বা উচ্চতর সংস্করণে উপলব্ধ। নেটওয়ার্ক অ্যাক্টিভিটি লগ করার আগে, আপনার ডিপিসি চেক করা উচিত যে এটি একটি ডিভাইসের মালিক নাকি একটি পরিচালিত প্রোফাইলের প্রোফাইল মালিক। একটি কাজের প্রোফাইল সহ একটি ডিভাইস মালিকের নেটওয়ার্ক লগ ইন ব্যক্তিগত প্রোফাইলে নেটওয়ার্ক কার্যকলাপ অন্তর্ভুক্ত করে না যদি এটি প্রোফাইল মালিক দ্বারা সক্ষম করা হয়৷

নেটওয়ার্ক লগিং সক্ষম করুন

লগিং নেটওয়ার্ক কার্যকলাপ শুরু করতে, DevicePolicyManager পদ্ধতি setNetworkLoggingEnabled() কল করুন এবং enabled যুক্তি হিসাবে true পাস করুন৷ নেটওয়ার্ক কার্যকলাপ লগ করা আছে কিনা তা পরীক্ষা করতে আপনার DPC isNetworkLoggingEnabled() কল করতে পারে।

আপনার DPC নেটওয়ার্ক লগিং সক্ষম করার পরে, লগগুলির প্রথম ব্যাচ প্রস্তুত হতে কিছু সময় লাগতে পারে। আপনি আপনার ইউজার ইন্টারফেসে আইটি অ্যাডমিনদের জন্য ডেলিভারি প্রত্যাশা সেট করতে চাইতে পারেন।

লগিং নেটওয়ার্ক কার্যকলাপ বন্ধ করতে, setNetworkLoggingEnabled() কল করুন এবং false পাস করুন। যখন একজন আইটি প্রশাসক নেটওয়ার্ক লগিং বন্ধ করে দেয়, তখন সিস্টেম যেকোনো সংগৃহীত এবং অপ্রতিবেদিত লগ মুছে দেয়।

লগ পুনরুদ্ধার করুন

আপনার DPC ব্যাচগুলিতে লগগুলি পুনরুদ্ধার করতে পারে — নেটওয়ার্ক লগিং APIগুলি অতীতের পৃথক এন্ট্রিগুলিতে এলোমেলো অ্যাক্সেস সরবরাহ করে না। লগের একটি নতুন ব্যাচ উপলব্ধ হলে, আপনার DPC এর DeviceAdminReceiver সাবক্লাস onNetworkLogsAvailable() কলব্যাক গ্রহণ করে। কলব্যাকে একটি ব্যাচ টোকেন রয়েছে যা আপনার DPC লগগুলি পুনরুদ্ধার করতে ব্যবহার করতে পারে৷ আপনার DPC নেটওয়ার্ক ইভেন্টের তালিকা পেতে DevicePolicyManager পদ্ধতি retrieveNetworkLogs() কল করে।

নিম্নলিখিত উদাহরণটি দেখায় যে আপনি আপনার DeviceAdminReceiver সাবক্লাসে লগগুলি পুনরুদ্ধার করতে পারেন:

কোটলিন

fun onNetworkLogsAvailable(
        context: Context, intent: Intent, batchToken: Long, networkLogsCount: Int) {

    val dpm = getManager(context)
    var logs: List<NetworkEvent>? = null

    // Fetch the batch of logs with the batch token from the callback's arguments.
    try {
        logs = dpm.retrieveNetworkLogs(getWho(context), batchToken)
    } catch (e: SecurityException) {
        // Perhaps an unaffiliated user - handle the exception ...
    }

    // Process any logs ...
}

জাভা

public void onNetworkLogsAvailable(
    Context context, Intent intent, long batchToken, int networkLogsCount) {

  DevicePolicyManager dpm = getManager(context);
  List<NetworkEvent> logs = null;

  // Fetch the next batch of logs using the callback's batch token argument.
  try {
    logs = dpm.retrieveNetworkLogs(getWho(context), batchToken);
  } catch (SecurityException e) {
    // Perhaps an unaffiliated user - handle the exception ...
  }

  // Process any logs ...
}

আপনার DPC এর লগগুলি অবিলম্বে পুনরুদ্ধার করা উচিত কারণ সিস্টেম নতুন ব্যাচের জন্য জায়গা তৈরি করতে লগগুলি মুছে দেয়। আপনি আপনার লগগুলির স্থানীয় অনুলিপি রাখতে চাইতে পারেন যতক্ষণ না আপনি নিশ্চিত না হন যে আপনার DPC সমস্যা ছাড়াই সেগুলিকে প্রক্রিয়া করেছে৷

কোনো লগ প্রক্রিয়া

লগের একটি ব্যাচে সাধারণত DnsEvent এবং ConnectEvent উদাহরণের মিশ্রণ থাকে। DNS লুকআপ এবং নেটওয়ার্ক সংযোগের ডেটা ক্ষেত্র সম্পর্কে আরও জানতে, ইভেন্ট লগগুলি দেখুন। ইভেন্টগুলি কালানুক্রমিক ক্রমে এবং প্রতিটি ব্যাচে 1200 টির বেশি ইভেন্ট নেই৷

লগগুলি পুনরুদ্ধার করার জন্য আপনার কল করার পরে, রিটার্ন মানটি null নয় তা পরীক্ষা করুন। নিম্নলিখিতগুলির মধ্যে একটি ঘটলে মানটি null হতে পারে:

  • ব্যাচ টোকেন দ্বারা উপস্থাপিত ব্যাচ আর উপলব্ধ নেই৷ আপনার DPC ব্যাচ পুনরুদ্ধার করতে পারে না এবং পরবর্তী ব্যাচের জন্য অপেক্ষা করা উচিত।
  • IT অ্যাডমিন নেটওয়ার্ক লগিং অক্ষম করেছে৷

নিম্নলিখিত সরলীকৃত উদাহরণ দেখায় কিভাবে DPC সমাধান করা DNS হোস্টনামগুলিকে বের করতে পারে। আপনার DPC আরো পরিশীলিত প্রক্রিয়াকরণ এবং রিপোর্টিং প্রয়োজন.

কোটলিন

// Here, logs might be null. We can't fix because either the token doesn't match
// the current batch or network logging was deactivated.
// Confirm with isNetworkLoggingEnabled().

logs?.forEach {
    // For this example, report the DNS hosts and discard all other data.
    // Because we use the event ID, this example requires API level 28.
    if (it is DnsEvent) {
        reportDnsHostToServer(it.hostname, it.getTimestamp(), it.getId())
    }
}

জাভা

if (logs == null) {
  // Abandon processing because either the token doesn't match the current batch
  // or network logging was deactivated - confirm with isNetworkLoggingEnabled().
  return;
}

for (NetworkEvent event : logs) {
  // For this example, report the DNS hosts and discard all other data.
  // This example requires API level 28 because we use the event ID.
  if (event instanceof DnsEvent) {
    reportDnsHostToServer(
        ((DnsEvent) event).getHostname(), event.getTimestamp(), event.getId());
  }
}

পূর্ববর্তী উদাহরণটিও দেখায় যে আপনি কীভাবে Android 9.0 (API স্তর 28) বা উচ্চতর ইভেন্টগুলির জন্য সংখ্যাসূচক আইডি পেতে পারেন৷ যেহেতু প্রতিটি ইভেন্টের জন্য আইডি একঘেয়েভাবে বৃদ্ধি পায়, আপনি আইটি অ্যাডমিনদের তাদের লগের ফাঁক খুঁজে পেতে সহায়তা করতে পারেন। যখনই একটি DPC লগিং সক্ষম করে বা ডিভাইসটি পুনরায় চালু হয় তখন সিস্টেমটি ID রিসেট করে।

আপনার DPC সম্পূর্ণ সংগ্রহটি একটি সার্ভারে পাঠাতে পারে অথবা আপনি ডিভাইসে ইভেন্টগুলি ফিল্টার করার সিদ্ধান্ত নিতে পারেন। উদাহরণস্বরূপ, আপনি আইটি অ্যাডমিনদের জন্য অনুমোদিত তালিকাভুক্ত রিপোর্টিং অফার করতে পারেন।

উন্নয়ন এবং পরীক্ষা

আপনি যখন বিকাশ করছেন এবং পরীক্ষা করছেন, আপনি শত শত ওয়েব পৃষ্ঠাগুলি ব্রাউজ না করেই onNetworkLogsAvailable() কলব্যাক পেতে চাইতে পারেন৷ Android 9.0 (API স্তর 28) বা উচ্চতর, আপনি কয়েকটি নমুনা নেটওয়ার্ক অনুরোধ করতে পারেন এবং সিস্টেমকে একটি লগ-উপলভ্য কলব্যাক পাঠাতে বাধ্য করতে পারেন। আপনার টার্মিনালে নিম্নলিখিত Android Debug Bridge (adb) কমান্ডটি চালান:

adb shell dpm force-network-logs

সিস্টেমটি সীমিত করে যে আপনি কত ঘন ঘন টুলটি ব্যবহার করতে পারেন এবং টার্মিনাল আউটপুটে কোন ইচ্ছাকৃত ধীরগতির রিপোর্ট করে। পুনরুদ্ধার করার জন্য কোনো লগ না থাকলে, আপনার DPC কলব্যাক পাবে না।