این سند توضیح می دهد که چگونه یک کنترل کننده خط مشی دستگاه (DPC) فعالیت شبکه را ثبت می کند. برای یادگیری نحوه افزودن گزارش شبکه به DPC خود به خواندن ادامه دهید.
نمای کلی
ثبت فعالیت شبکه می تواند به شرکت ها کمک کند تا انتشار بدافزار را در دستگاه های خود شناسایی و ردیابی کنند. DPC شما میتواند با APIهای گزارشگیری شبکه تماس بگیرد تا اتصالات TCP و جستجوهای DNS از تماسهای شبکه سیستم را گزارش کند.
به طور معمول، DPC شما گزارشها را برای ارائه به یک سرپرست فناوری اطلاعات به سرور تحویل میدهد. ممکن است بخواهید گزارشها را بیشتر در سرور خود یا به صورت محلی در دستگاه پردازش کنید. برای مثال، میتوانید فهرستهای انکار DNS را برای شناسایی و هشدار دادن به مدیران فناوری اطلاعات در مورد رفتار مشکوک راهاندازی کنید.
در دسترس بودن
ثبت شبکه در اندروید 8 و بالاتر برای صاحب دستگاه پشتیبانی میشود. اگر فعال باشد، دادههای مربوط به فعالیت شبکه دستگاه را جمعآوری میکند. همچنین در Android 12 و بالاتر برای مالک نمایه یک نمایه مدیریت شده و یک برنامه تفویض شده با DELEGATION_NETWORK_LOGGING پشتیبانی میشود. وقتی ثبت شبکه توسط مالک نمایه فعال میشود، گزارشهای شبکه فقط شامل فعالیت شبکه نمایه کاری میشود و دادهها را از نمایه شخصی جمعآوری نمیکند.
برای کسب اطلاعات بیشتر، کاربران وابسته را بخوانید.
گزارش رویدادها
هنگامی که گزارش شبکه فعال است، Android هر رویداد را از برنامهها با استفاده از کتابخانههای شبکه سیستم ضبط میکند. ثبت شبکه دو نوع رویداد را ثبت می کند:
- جستجوهای DNS
- اتصالات شبکه
جستجوهای DNS
گزارش شبکه یک رویداد را برای جستجوهای DNS که بخشی از درخواست های شبکه سیستم هستند، ثبت می کند. گزارشها هر درخواست DNS را که نام میزبان را به آدرس IP حل میکند، ضبط میکند. سایر درخواستهای DNS پشتیبانی، مانند کشف سرور نام، ثبت نمیشوند.
APIهای ثبت فعالیت شبکه هر جستجوی DNS را به عنوان یک نمونه DnsEvent
ارائه می کنند. جدول 1 فیلدها و مقادیر معمولی ثبت شده در یک DnsEvent
را توضیح می دهد.
داده ها | مثال | توضیحات |
---|---|---|
نام میزبان | host.example.com | نام میزبان در جستار DNS ارسال شده است. |
آدرس های اینت | 203.0.113.9 , 198.51.100.25 | لیستی از IPv4 یا IPv6 به درخواست DNS حل شده برای نام میزبان آدرس می دهد. برای قابل مدیریت نگه داشتن اندازه گزارش، ممکن است نتایج شامل همه آدرسهای IP نباشد - تعداد آدرسها را در ردیف زیر ببینید. |
تعداد آدرس | 4 | تعداد آدرسهای IP بازگردانده شده از وضوح پرس و جو DNS. از این استفاده کنید تا متوجه شوید که آیا آدرس های IP ثبت شده زیرمجموعه ای از نتایج هستند یا خیر. مقدار 0 (صفر) به این معنی است که نام میزبان به آدرس IP حل نشده است. |
نام بسته | com.android.chrome | نام بسته برنامه ای که درخواست DNS را انجام داده است. |
مهر زمان | 1506297600000 | زمانی که جستجوی DNS اتفاق افتاد، یک مهر زمانی ضبط میشود. مقدار فاصله میلی ثانیه ای بین جستجوی DNS و نیمه شب 1 ژانویه 1970 UTC است. |
شناسه | 25 | شناسه عددی یکنواخت در حال افزایش. در Android 9.0 (سطح API 28) یا بالاتر موجود است. |
در حالی که جستجوی DNS می تواند به مدیران فناوری اطلاعات کمک کند تا اتصالات شبکه را ردیابی کنند، گزارش شبکه یک راه حل همه منظوره ضبط DNS نیست. در اینجا برخی از وظایف DNS وجود دارد که ممکن است یک برنامه انجام دهد که ثبت نشده اند:
- ارتباط مستقیم با سرور نام DNS.
- فراخوانی یک کتابخانه جاوا DNS برای ایجاد پرس و جوهای DNS.
- اجتناب از درخواست DNS با اتصال به یک آدرس IP ثابت.
اتصالات شبکه
گزارش شبکه یک رویداد را برای هر اتصال تلاش شده که بخشی از درخواست شبکه سیستم است، ثبت می کند. گزارشها اتصالات TCP موفق و ناموفق را ضبط میکنند—انتقالات UDP ثبت نمیشوند.
APIهای ثبت فعالیت شبکه هر اتصال را به عنوان یک نمونه ConnectEvent
ارائه می کنند. جدول 2 فیلدها و مقادیر معمولی ثبت شده در یک ConnectEvent
را توضیح می دهد.
داده ها | مثال | توضیحات |
---|---|---|
آدرس های اینت | 2001:db8::2f:abc:0 | آدرس IP که دستگاه به آن متصل است. این ممکن است یک آدرس IPv4 یا IPv6 باشد. |
بندر | 80 | شماره پورت TCP دستگاهی که به آن متصل است. |
نام بسته | com.android.chrome | نام بسته برنامه ای که متصل شد. |
مهر زمان | 1506297600000 | زمانی که اتصال شبکه اتفاق افتاد، یک مهر زمانی ضبط میشود. مقدار فاصله میلی ثانیه ای بین اتصال و نیمه شب، 1 ژانویه 1970 UTC است. |
شناسه | 26 | شناسه عددی یکنواخت در حال افزایش. در Android 9.0 (سطح API 28) یا بالاتر موجود است. |
هنگام فراخوانی یک برنامه با کتابخانههای شبکه استاندارد، مانند APIهای داخلی Android یا کتابخانههای شخص ثالث محبوب، رویدادی را ثبت میکند تا به یک میزبان متصل شود. برنامههایی که تماسهای سیستمی را مستقیماً برای برقراری ارتباط صادر میکنند، ثبت نمیشوند. به یاد داشته باشید، شبکه UDP ثبت نشده است، بنابراین برخی از برنامههای پخش رسانه، پیامرسانی و بازی ممکن است در گزارشها ظاهر نشوند.
به کاربران اطلاع دهید
سیستم به کاربران دستگاه هشدار می دهد که گزارش فعالیت شبکه فعال است. کاربران هشدارهای زیر را در رابط مشاهده می کنند:
- بخشی در گفتگوی مدیریت دستگاه که DPC شما را توضیح می دهد، ترافیک شبکه را نظارت می کند. کاربران با ضربه زدن روی برچسب اطلاعات دستگاه مدیریت شده در تنظیمات سریع، گفتگو را مشاهده می کنند.
- زمانی که کاربر تازه وارد گزارش شبکه شده است، یک اعلان سیستم قابل رد کردن نشان داده میشود. ضربه زدن روی اعلان، گفتگوی Device monitoring را با توضیحات بیشتر در بخش نظارت بر شبکه نشان می دهد. هنگامی که DPC شما گزارش شبکه را غیرفعال می کند، اعلان ناپدید می شود.
گزارش شبکه را به DPC خود اضافه کنید
برای کمک به مدیران فناوری اطلاعات در بررسی گزارشهای شبکه، DPC شما باید بتواند وظایف زیر را انجام دهد:
- ورود به شبکه را روشن و خاموش کنید.
- هنگامی که یک دسته جدید آماده شد، هر گونه گزارش ثبت شده را بازیابی کنید.
- داده های مفید موجود در گزارش ها را به یک سرور ارسال کنید.
الزامات
گزارش شبکه در Android 8.0 (سطح API 26) یا بالاتر برای صاحب دستگاه و Android 12 (سطح API 31) یا بالاتر برای مالک نمایه یک نمایه مدیریت شده در دسترس است. قبل از ثبت فعالیت شبکه، DPC شما باید بررسی کند که مالک دستگاه است یا مالک نمایه یک نمایه مدیریت شده. گزارشهای شبکه در مالک دستگاه با نمایه کاری، در صورتی که توسط مالک نمایه فعال شده باشد، شامل فعالیت شبکه در نمایه شخصی نمیشود.
ثبت شبکه را فعال کنید
برای شروع گزارش فعالیت شبکه، متد DevicePolicyManager
setNetworkLoggingEnabled()
را فراخوانی کرده و true
به عنوان آرگومان enabled
ارسال کنید. DPC شما میتواند با isNetworkLoggingEnabled()
تماس بگیرد تا بررسی کند که آیا فعالیت شبکه ثبت شده است یا خیر.
پس از اینکه DPC شما گزارش شبکه را فعال کرد، ممکن است مدتی طول بکشد تا اولین دسته از گزارشها آماده شود. ممکن است بخواهید انتظارات تحویل را برای مدیران فناوری اطلاعات در رابط کاربری خود تنظیم کنید.
برای توقف گزارش فعالیت شبکه، setNetworkLoggingEnabled()
را فراخوانی کنید و false
ارسال کنید. هنگامی که یک سرپرست فناوری اطلاعات گزارش شبکه را خاموش می کند، سیستم هر گزارش جمع آوری شده و گزارش نشده را حذف می کند.
گزارش ها را بازیابی کنید
DPC شما میتواند گزارشها را بهصورت دستهای بازیابی کند - APIهای گزارشگیری شبکه دسترسی تصادفی به ورودیهای فردی قبلی را فراهم نمیکنند. وقتی دسته جدیدی از گزارشها در دسترس است، زیرکلاس DeviceAdminReceiver
DPC شما پاسخ تماس 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) یا بالاتر گنجانده شدهاند، دریافت کنید. از آنجایی که ID به طور یکنواخت برای هر رویداد افزایش مییابد، میتوانید به مدیران فناوری اطلاعات کمک کنید تا شکافهای موجود در گزارشهای خود را شناسایی کنند. هر زمان که یک DPC ورود به سیستم را فعال می کند یا هنگامی که دستگاه راه اندازی مجدد می شود، سیستم شناسه را بازنشانی می کند.
DPC شما میتواند کل مجموعه را به یک سرور ارسال کند یا ممکن است تصمیم بگیرید رویدادهای دستگاه را فیلتر کنید. به عنوان مثال، ممکن است برای مدیران فناوری اطلاعات گزارشهای مجاز ارائه دهید.
توسعه و آزمایش
در حالی که در حال توسعه و آزمایش هستید، ممکن است بخواهید بدون نیاز به مرور صدها صفحه وب، فراخوان های onNetworkLogsAvailable()
دریافت کنید. در Android 9.0 (سطح API 28) یا بالاتر، میتوانید چند نمونه درخواست شبکه انجام دهید و سیستم را مجبور کنید که یک تماس پاسخگوی گزارشهای موجود ارسال کند. دستور Android Debug Bridge (adb) زیر را در ترمینال خود اجرا کنید:
adb shell dpm force-network-logs
این سیستم تعداد دفعات استفاده از ابزار را محدود می کند و هرگونه کندی عمدی در خروجی ترمینال را گزارش می دهد. اگر هیچ گزارشی برای بازیابی وجود نداشته باشد، DPC شما پاسخ تماسی دریافت نمی کند.