এই ডকুমেন্ট থেকে জানা যায় যে ডিভাইস নীতি কন্ট্রোলার (DPC) কীভাবে নেটওয়ার্ক অ্যাক্টিভিটি লগ করে। আপনার DPC-তে কীভাবে নেটওয়ার্ক লগিং যোগ করবেন তা জানতে পড়া চালিয়ে যান।
এক নজরে
নেটওয়ার্ক অ্যাক্টিভিটি লগ করলে, এন্টারপ্রাইজগুলি তাদের ডিভাইসে ম্যালওয়্যার ছড়িয়ে পড়া শনাক্ত ও ট্র্যাক করতে পারে। আপনার DPC, সিস্টেম নেটওয়ার্কিং কল থেকে TCP কানেকশন ও DNS লুক-আপের ব্যাপারে রিপোর্ট করতে নেটওয়ার্ক লগিং API কল করতে পারে।
সাধারণত, আপনার DPC কোনও আইটি অ্যাডমিনকে দেখানোর জন্য সার্ভারে লগ ডেলিভার করে। আপনি হয়ত আপনার সার্ভারে বা ডিভাইসে লোকালি লগ আরও প্রসেস করতে চাইবেন। যেমন, সন্দেহজনক আচরণ শনাক্ত করতে এবং আইটি অ্যাডমিনদের সতর্ক করতে আপনি ডিএনএস ব্লকলিস্ট সেট-আপ করতে পারেন।
উপলভ্যতা
Android 8 এবং তার পরবর্তী যেকোনও ভার্সনে ডিভাইসের মালিকের জন্য নেটওয়ার্ক লগিং কাজ করে। চালু করা হলে, এটি ডিভাইসের নেটওয়ার্ক অ্যাক্টিভিটি সংক্রান্ত ডেটা সংগ্রহ করে। এছাড়াও, এটি Android 12 ও তার পরবর্তী ভার্সনে ম্যানেজ করা প্রোফাইলের মালিক এবং DELEGATION_NETWORK_LOGGING সহ ডেলিগেট করা অ্যাপের ক্ষেত্রে কাজ করে। প্রোফাইলের মালিক নেটওয়ার্ক লগিং চালু করলে, নেটওয়ার্ক লগে শুধুমাত্র অফিস প্রোফাইলের নেটওয়ার্ক অ্যাক্টিভিটি অন্তর্ভুক্ত থাকে এবং ব্যক্তিগত প্রোফাইল থেকে ডেটা সংগ্রহ করা হয় না।
আরও জানতে, অ্যাফিলিয়েটেড ব্যবহারকারী নিবন্ধটি পড়ুন।
ইভেন্টের লগ
নেটওয়ার্ক লগিং চালু থাকলে, সিস্টেম নেটওয়ার্কিং লাইব্রেরি ব্যবহার করে Android প্রতিটি অ্যাপের ইভেন্ট রেকর্ড করে। নেটওয়ার্ক লগিং দুই ধরনের ইভেন্ট রেকর্ড করে:
- DNS লুকআপ
- নেটওয়ার্ক কানেকশন
DNS লুকআপ
নেটওয়ার্ক লগিং, সিস্টেম নেটওয়ার্ক অনুরোধের অংশ হিসেবে DNS লুক-আপের জন্য একটি ইভেন্ট রেকর্ড করে। লগ প্রতিটি DNS অনুরোধ ক্যাপচার করে যা একটি হোস্টনেমকে একটি IP অ্যাড্রেসে সমাধান করে। অন্যান্য সহায়ক DNS কোয়েরি, যেমন নেম সার্ভার ডিসকভারি, রেকর্ড করা হয় না।
নেটওয়ার্ক অ্যাক্টিভিটি লগিং API প্রতিটি DNS লুকআপকে
DnsEvent ইনস্ট্যান্স হিসেবে দেখায়। সারণী ১-এ DnsEvent-এ রেকর্ড করা ফিল্ড ও সাধারণ
ভ্যালু বর্ণনা করা হয়েছে।
টেবিল ১. ডিএনএস ইভেন্ট ফিল্ড
| ডেটা | উদাহরণ | বর্ণনা |
|---|---|---|
| হোস্টনেম | host.example.com | DNS কোয়েরিতে পাঠানো হোস্টনেম। |
| Inet অ্যাড্রেস | 203.0.113.9, 198.51.100.25 | IPv4 বা IPv6 অ্যাড্রেসের তালিকা যা হোস্টনেমের জন্য ডিএনএস কোয়েরি সমাধান করেছে। লগের সাইজ ম্যানেজ করার জন্য, ফলাফলে সব IP অ্যাড্রেস নাও থাকতে পারে—নিচের সারিতে অ্যাড্রেসের সংখ্যা দেখুন। |
| ঠিকানার সংখ্যা | ৪ | DNS কোয়েরি রেজোলিউশন থেকে পাওয়া IP অ্যাড্রেসের সংখ্যা। লগ-ইন করা IP অ্যাড্রেস ফলাফলের সাবসেট কিনা তা জানতে এটি ব্যবহার করুন। ০ (শূন্য) ভ্যালু থাকার অর্থ হল হোস্টনেম কোনও IP অ্যাড্রেসে রিসলভ হয়নি। |
| প্যাকেজের নাম | com.android.chrome | যে অ্যাপ DNS কোয়েরি করেছে সেটির প্যাকেজের নাম। |
| টাইমস্ট্যাম্প | 1506297600000 | DNS খোঁজার সময় রেকর্ড করা টাইমস্ট্যাম্প। এই ভ্যালু হল ডিএনএস খোঁজা এবং ১ জানুয়ারি, ১৯৭০ UTC মধ্যরাতের মধ্যে মিলিসেকেন্ডের ব্যবধান। |
| আইডি | 25 | একটি একঘেয়ে ক্রমবর্ধমান সংখ্যাসূচক আইডি। Android 9.0 (API লেভেল ২৮) বা তার পরবর্তী যেকোনও ভার্সনে উপলভ্য। |
ডিএনএস (DNS) খোঁজা আইটি অ্যাডমিনকে নেটওয়ার্ক কানেকশন ট্র্যাক করতে সাহায্য করলেও, নেটওয়ার্ক লগিং কোনও সাধারণ-উদ্দেশ্যের ডিএনএস (DNS) রেকর্ডিং সমাধান নয়। এখানে কিছু DNS টাস্ক দেওয়া হল যা কোনও অ্যাপ করতে পারে যেগুলি লগ করা নেই:
- সরাসরি ডিএনএস (DNS) নেম সার্ভারের সাথে যোগাযোগ করা।
- ডিএনএস কোয়েরি করার জন্য জাভা ডিএনএস লাইব্রেরি কল করা।
- একটি নির্দিষ্ট IP অ্যাড্রেসে কানেক্ট করে DNS কোয়েরি এড়ানো।
নেটওয়ার্ক কানেকশন
নেটওয়ার্ক লগিং, সিস্টেম নেটওয়ার্ক অনুরোধের অংশ হিসেবে কানেকশনের প্রতিটি প্রচেষ্টার জন্য একটি ইভেন্ট রেকর্ড করে। লগ সফল ও ব্যর্থ TCP কানেকশন ক্যাপচার করে—UDP ট্রান্সফার রেকর্ড করা হয় না।
নেটওয়ার্ক অ্যাক্টিভিটি লগিং API প্রতিটি কানেকশনকে
ConnectEvent ইনস্ট্যান্স হিসেবে দেখায়। সারণী ২-এ ফিল্ড এবং ConnectEvent-এ রেকর্ড করা
সাধারণ ভ্যালু বর্ণনা করা হয়েছে।
টেবিল ২. ইভেন্ট ফিল্ড কানেক্ট করুন
| ডেটা | উদাহরণ | বর্ণনা |
|---|---|---|
| Inet অ্যাড্রেস | 2001:db8::2f:abc:0 | ডিভাইসটি যে IP অ্যাড্রেসের সাথে কানেক্ট করা হয়েছে। এটি IPv4 বা IPv6 অ্যাড্রেস হতে পারে। |
| পোর্ট | ৮০ | ডিভাইসটি যে TCP পোর্ট নম্বরের সাথে কানেক্ট করা আছে। |
| প্যাকেজের নাম | com.android.chrome | কানেক্ট করা অ্যাপের প্যাকেজের নাম। |
| টাইমস্ট্যাম্প | 1506297600000 | নেটওয়ার্ক কানেকশন কখন হয়েছে তার টাইমস্ট্যাম্প রেকর্ডিং। এই ভ্যালু হল কানেকশন এবং ১ জানুয়ারি, ১৯৭০ UTC মধ্যরাতের মধ্যে মিলিসেকেন্ডের ব্যবধান। |
| আইডি | ২৬ | একটি একঘেয়ে ক্রমবর্ধমান সংখ্যাসূচক আইডি। Android 9.0 (API লেভেল ২৮) বা তার পরবর্তী যেকোনও ভার্সনে উপলভ্য। |
কোনও অ্যাপ হোস্টের সাথে কানেক্ট করার জন্য Android-এর বিল্ট-ইন API বা জনপ্রিয় থার্ড-পার্টি লাইব্রেরির মতো স্ট্যান্ডার্ড নেটওয়ার্ক লাইব্রেরিকে কল করলে, নেটওয়ার্ক লগিং সেই ইভেন্ট রেকর্ড করে। যেসব অ্যাপ সরাসরি যোগাযোগের জন্য সিস্টেম কল ইস্যু করে সেগুলি লগ করা হয় না। মনে রাখবেন, UDP নেটওয়ার্কিং লগ করা হয় না, তাই কিছু মিডিয়া স্ট্রিমিং, মেসেজিং এবং গেমিং অ্যাপ লগে নাও দেখা যেতে পারে।
ব্যবহারকারীদের জানানো
নেটওয়ার্ক অ্যাক্টিভিটি লগিং চালু আছে বলে সিস্টেম ডিভাইস ব্যবহারকারীদের সতর্ক করে। ব্যবহারকারীরা ইন্টারফেসে নিম্নলিখিত সতর্কতা দেখতে পাবেন:
- ডিভাইস ম্যানেজমেন্ট ডায়ালগের একটি বিভাগ যেখানে আপনার DPC নেটওয়ার্ক ট্রাফিক মনিটর করছে বলে ব্যাখ্যা করা হয়েছে। ব্যবহারকারীরা 'দ্রুত সেটিংস'-এ ম্যানেজ করা ডিভাইসের তথ্য লেবেলে ট্যাপ করে ডায়ালগ দেখতে পান।
- ব্যবহারকারী নেটওয়ার্ক লগিংয়ে নতুন হলে, বাতিল করা যায় এমন সিস্টেম বিজ্ঞপ্তি দেখানো হয়। বিজ্ঞপ্তিতে ট্যাপ করলে ডিভাইস মনিটরিং ডায়ালগ বক্স দেখা যায়, যেখানে নেটওয়ার্ক মনিটরিং বিভাগে আরও ব্যাখ্যা দেওয়া থাকে। আপনার DPC নেটওয়ার্ক লগিং বন্ধ করে দিলে বিজ্ঞপ্তিটি আর দেখা যায় না।
আপনার DPC-তে নেটওয়ার্ক লগিং যোগ করুন
আইটি অ্যাডমিনদের নেটওয়ার্ক লগ পর্যালোচনা করতে সাহায্য করার জন্য, আপনার DPC-কে নিম্নলিখিত টাস্কগুলি সম্পূর্ণ করতে সক্ষম হতে হবে:
- নেটওয়ার্ক লগিং চালু বা বন্ধ করুন।
- নতুন ব্যাচ রেডি হলে যেকোনও রেকর্ড করা লগ ফিরিয়ে আনুন।
- লগে থাকা প্রয়োজনীয় ডেটা সার্ভারে পাঠান।
প্রয়োজনীয়তা
Android 8.0 (API লেভেল ২৬) বা তার পরবর্তী যেকোনও ভার্সনে ডিভাইসের মালিকের জন্য এবং Android 12 (API লেভেল ৩১) বা তার পরবর্তী যেকোনও ভার্সনে ম্যানেজ করা প্রোফাইলের মালিকের জন্য নেটওয়ার্ক লগিং উপলভ্য। নেটওয়ার্ক অ্যাক্টিভিটি লগ করার আগে, আপনার DPC-কে চেক করতে হবে যে এটি কোনও ডিভাইসের মালিক নাকি ম্যানেজ করা প্রোফাইলের মালিক। অফিস প্রোফাইল সহ ডিভাইসের মালিকের নেটওয়ার্ক লগে ব্যক্তিগত প্রোফাইলের নেটওয়ার্ক অ্যাক্টিভিটি অন্তর্ভুক্ত থাকে না, যদি এটি প্রোফাইলের মালিকের দ্বারা চালু করা থাকে।
নেটওয়ার্ক লগিং চালু করুন
নেটওয়ার্ক অ্যাক্টিভিটি লগ করা শুরু করতে, DevicePolicyManager
মেথড setNetworkLoggingEnabled() কল করুন এবং enabled আর্গুমেন্ট হিসেবে
true পাস করুন। নেটওয়ার্ক অ্যাক্টিভিটি লগ করা হয়েছে কিনা তা চেক করতে আপনার DPC
isNetworkLoggingEnabled() কল করতে পারে।
আপনার DPC নেটওয়ার্ক লগিং চালু করার পরে, প্রথম ব্যাচের লগ তৈরি হতে কিছুটা সময় লাগতে পারে। আপনার ইউজার ইন্টারফেসে আইটি অ্যাডমিনদের জন্য ডেলিভারি সংক্রান্ত প্রত্যাশা সেট করতে চাইতে পারেন।
নেটওয়ার্ক অ্যাক্টিভিটি লগ করা বন্ধ করতে, setNetworkLoggingEnabled() কল করুন এবং
false পাস করুন। আইটি অ্যাডমিন নেটওয়ার্ক লগিং বন্ধ করে দিলে, সিস্টেম সংগ্রহ করা ও রিপোর্ট না করা
লগ মুছে দেয়।
লগ ফিরিয়ে আনুন
আপনার DPC ব্যাচে লগ ফিরিয়ে আনতে পারে—নেটওয়ার্ক লগিং API
পুরনো ব্যক্তিগত এন্ট্রিতে র্যান্ডম অ্যাক্সেস প্রদান করে না। লগের নতুন ব্যাচ উপলভ্য হলে,
আপনার DPC-এর DeviceAdminReceiver সাবক্লাস
onNetworkLogsAvailable() কলব্যাক পায়। কলব্যাকে
একটি ব্যাচ টোকেন অন্তর্ভুক্ত থাকে যা আপনার DPC লগগুলি পুনরুদ্ধার করতে ব্যবহার করতে পারে। আপনার DPC, নেটওয়ার্ক ইভেন্টের তালিকা পেতে
DevicePolicyManager পদ্ধতি retrieveNetworkLogs() কল করে।
নিম্নলিখিত উদাহরণ থেকে আপনি জানতে পারবেন যে কীভাবে আপনার
DeviceAdminReceiver সাবক্লাসে লগ ফিরিয়ে আনতে পারবেন:
Kotlin
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 লুক-আপ ও নেটওয়ার্ক কানেকশনের ডেটা ফিল্ড সম্পর্কে আরও জানতে, ইভেন্ট লগ দেখুন। ইভেন্টগুলি
কালানুক্রমিক ক্রমে রয়েছে এবং প্রতিটি ব্যাচে ১২০০টির বেশি ইভেন্ট নেই।
লগ ফিরিয়ে আনার জন্য কল করার পরে, রিটার্ন ভ্যালু null কিনা তা চেক করুন। নিম্নলিখিত কোনও একটি ঘটনা ঘটলে
ভ্যালু null হতে পারে:
- ব্যাচ টোকেন দ্বারা উপস্থাপিত ব্যাচটি আর উপলভ্য নেই। আপনার DPC ব্যাচটি ফিরিয়ে আনতে পারবে না এবং পরবর্তী ব্যাচের জন্য অপেক্ষা করতে হবে।
- আইটি অ্যাডমিন নেটওয়ার্ক লগিং বন্ধ করে দিয়েছেন।
নিচের সহজ উদাহরণ থেকে বোঝা যাবে যে DPC কীভাবে সমাধান করা DNS হোস্টনেম এক্সট্র্যাক্ট করতে পারে। আপনার DPC-এর আরও অত্যাধুনিক প্রসেসিং ও রিপোর্টিং প্রয়োজন।
Kotlin
// 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 লেভেল ২৮) বা তার পরবর্তী ভার্সনে অন্তর্ভুক্ত ইভেন্টের জন্য কীভাবে আপনি সংখ্যাসূচক আইডি পেতে পারেন, তাও আগের উদাহরণে দেখানো হয়েছে। প্রতিটি ইভেন্টের জন্য আইডি একটানা বৃদ্ধি পায়, তাই আপনি আইটি অ্যাডমিনদের তাদের লগে ফাঁক খুঁজে পেতে সাহায্য করতে পারেন। DPC লগিং চালু করলে বা ডিভাইস রিস্টার্ট হলে সিস্টেম আইডি রিসেট করে।
আপনার DPC সম্পূর্ণ সংগ্রহটি একটি সার্ভারে পাঠাতে পারে অথবা আপনি ডিভাইসে ইভেন্টগুলি ফিল্টার করার সিদ্ধান্ত নিতে পারেন। যেমন, আপনি আইটি অ্যাডমিনদের জন্য অনুমোদিত রিপোর্টিংয়ের সুবিধা দিতে পারেন।
ডেভেলপমেন্ট ও টেস্টিং
ডেভেলপ ও পরীক্ষা করার সময়, আপনি হয়ত শত শত ওয়েব পেজ ব্রাউজ না করেই
onNetworkLogsAvailable() কলব্যাক পেতে চাইবেন। Android 9.0 (API লেভেল ২৮) বা তার পরবর্তী ভার্সনে, আপনি
কয়েকটি স্যাম্পেল নেটওয়ার্ক রিকোয়েস্ট করতে এবং সিস্টেমকে লগ-উপলভ্য
কলব্যাক পাঠাতে বাধ্য করতে পারবেন। আপনার টার্মিনালে নিম্নলিখিত Android ডিবাগ ব্রিজ (adb) কমান্ড
রান করুন:
adb shell dpm force-network-logs
আপনি কত ঘন ঘন টুলটি ব্যবহার করতে পারবেন তা সিস্টেম সীমিত করে এবং টার্মিনাল আউটপুটে ইচ্ছাকৃতভাবে ধীরগতির রিপোর্ট করে। যদি কোনও লগ না থাকে তাহলে আপনার DPC কোনও কলব্যাক পাবে না।