گزارش‌گیری فعالیت شبکه

این سند توضیح می‌دهد که کنترل‌کننده خط‌مشی دستگاه (DPC) چگونه فعالیت شبکه را ثبت می‌کند. برای آشنایی با نحوه افزودن ثبت گزارش شبکه به DPC، به خواندن ادامه دهید.

نمای کلی

ثبت فعالیت شبکه می‌تواند به شرکت‌ها کمک کند تا گسترش بدافزار را در دستگاه‌هایشان شناسایی و ردیابی کنند. DPC شما می‌تواند میاناهای برنامه‌سازی کاربردی گزارش‌گیری شبکه را فراخوانی کند تا اتصالات TCP و جستجوهای ساناد را از تماس‌های شبکه‌سازی سیستم گزارش کند.

معمولاً، DPC شما گزارش‌ها را به سروری ارسال می‌کند تا به سرپرست فناوری اطلاعات ارائه شود. ممکن است بخواهید گزارش‌ها را بیشتر در سرور خود یا به‌صورت محلی در دستگاه پردازش کنید. برای مثال، می‌توانید فهرست‌های رد ساناد را برای شناسایی و هشدار دادن به سرپرستان فناوری اطلاعات درباره رفتارهای مشکوک راه‌اندازی کنید.

دردسترس بودن

ثبت گزارش شبکه در Android نسخه ۸ و بالاتر برای مالک دستگاه پشتیبانی می‌شود. اگر فعال شود، داده‌های مربوط به فعالیت شبکه دستگاه را جمع‌آوری می‌کند. این ویژگی در Android نسخه ۱۲ و بالاتر برای مالک نمایه تحت‌مدیریت و برنامه واگذارشده با DELEGATION_NETWORK_LOGGING نیز پشتیبانی می‌شود. وقتی گزارش‌گیری شبکه توسط مالک نمایه فعال شده باشد، گزارش‌های شبکه فقط شامل فعالیت شبکه نمایه کاری است و داده‌ای از نمایه شخصی جمع‌آوری نمی‌کند.

برای کسب اطلاعات بیشتر، کاربران وابسته را بخوانید.

گزارش‌های وقایع

وقتی ثبت گزارش شبکه فعال باشد، Android هر رویداد را از برنامه‌هایی که از کتابخانه‌های شبکه سیستم استفاده می‌کنند ضبط می‌کند. ثبت گزارش شبکه دو نوع رویداد را ضبط می‌کند:

  • جستجوهای ساناد
  • اتصال‌های شبکه

جستجوهای ساناد

ثبت گزارش شبکه رویدادی را برای جستجوهای ساناد که بخشی از درخواست‌های شبکه سیستم هستند ثبت می‌کند. گزارش‌ها هر درخواست ساناد را که نام میزبان را به نشانی IP تبدیل می‌کند ضبط می‌کنند. دیگر پُرسمان‌های ساناد پشتیبانی، مثل کاوش سرور نام، ثبت نمی‌شوند.

میاناهای برنامه‌سازی کاربردی ثبت فعالیت شبکه هر جستجوی ساناد را به‌عنوان نمونه‌ای از DnsEvent ارائه می‌دهند. جدول ۱ فیلدها و مقادیر معمولی را که در DnsEvent ثبت شده است شرح می‌دهد.

جدول ۱. فیلدهای رویداد ساناد

داده مثال شرح
نام میزبان host.example.com نام میزبان ارسال‌شده در پُرسمان ساناد.
نشانی‌های Inet 203.0.113.9، 198.51.100.25 فهرستی از نشانی‌های IPv4 یا IPv6 که پُرسمان ساناد برای نام میزبان حل کرده است. برای اینکه اندازه گزارش قابل‌مدیریت باشد، ممکن است نتایج شامل همه نشانی‌های IP نباشد—تعداد نشانی‌ها را در ردیف زیر ببینید.
تعداد نشانی‌ها 4 تعداد نشانی‌های IP برگردانده‌شده از حل پُرسمان ساناد. از این مورد برای فهمیدن اینکه آیا نشانی‌های IP ثبت‌شده زیرمجموعه‌ای از نتایج هستند یا نه استفاده کنید. مقدار ۰ (صفر) یعنی نام میزبان به نشانی IP تبدیل نشده است.
نام بسته com.android.chrome نام بسته برنامه‌ای که پُرسمان ساناد را انجام داده است.
مُهر زمان 1506297600000 مُهر زمانی که نشان می‌دهد جستجوی ساناد چه زمانی انجام شده است. این مقدار فاصله زمانی برحسب میلی‌ثانیه بین جستجوی ساناد و نیمه‌شب ۱ ژانویه ۱۹۷۰ به وقت ساعت هماهنگ جهانی است.
شناسه 25 شناسه عددی که به‌طور یکنواخت افزایش می‌یابد. در Android 9.0 (سطح API‏ ۲۸) یا بالاتر دردسترس است.

درحالی‌که جستجوی ساناد می‌تواند به سرپرستان فناوری اطلاعات کمک کند اتصال‌های شبکه را ردیابی کنند، ثبت گزارش شبکه راهکاری با هدف کلی برای ضبط ساناد نیست. در اینجا برخی‌از کارهای ساناد که ممکن است برنامه انجام دهد و ثبت نشود آورده شده است:

  • ارتباط مستقیم با سرور نام ساناد.
  • فراخوانی کتابخانه ساناد Java برای ایجاد پُرسمان‌های ساناد.
  • اجتناب از پرسمان ساناد با اتصال به نشانی IP ثابت.

اتصال‌های شبکه

ثبت گزارش شبکه رویدادی را برای هر تلاش برای اتصال که بخشی از درخواست شبکه سیستم است ثبت می‌کند. گزارش‌ها اتصال‌های TCP موفق و ناموفق را ضبط می‌کنند—انتقال‌های UDP ضبط نمی‌شوند.

میاناهای برنامه‌سازی کاربردی ثبت فعالیت شبکه هر اتصال را به‌صورت نمونه‌ای از ConnectEvent ارائه می‌دهند. جدول ۲ فیلدها و مقادیر معمول ثبت‌شده در ConnectEvent را شرح می‌دهد.

جدول ۲. متصل کردن فیلدهای رویداد

داده مثال شرح
نشانی‌های Inet 2001:db8::2f:abc:0 نشانی IP که دستگاه به آن متصل شده است. این نشانی ممکن است نشانی IPv4 یا IPv6 باشد.
درگاه 80 شماره درگاه TCP که دستگاه به آن متصل شده است.
نام بسته com.android.chrome نام بسته برنامه‌ای که متصل شده است.
مُهر زمان 1506297600000 مُهر زمانی که زمان برقراری اتصال شبکه را ثبت می‌کند. این مقدار فاصله زمانی برحسب میلی‌ثانیه بین اتصال و نیمه‌شب ۱ ژانویه ۱۹۷۰ به وقت ساعت هماهنگ جهانی است.
شناسه 26 شناسه عددی که به‌طور یکنواخت افزایش می‌یابد. در Android نسخه ۹.۰ (سطح API‏ ۲۸) یا بالاتر دردسترس است.

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

اطلاع‌رسانی به کاربران

سیستم به کاربران دستگاه هشدار می‌دهد که ثبت فعالیت شبکه فعال است. کاربران هشدارهای زیر را در میانای کاربری می‌بینند:

  • بخشی در کادر گفتگوی مدیریت دستگاه که توضیح می‌دهد DPC شما درحال نظارت بر ترافیک شبکه است. کاربران با تک‌ضرب زدن روی برچسب اطلاعات دستگاه مدیریت‌شده در «تنظیمات فوری»، این کادر گفتگو را می‌بینند.
  • اعلان سیستم قابل‌بستن که وقتی کاربر با گزارش‌گیری شبکه آشنا نیست نشان داده می‌شود. با تک‌ضرب زدن روی اعلان، کادر گفتگوی پایش دستگاه با توضیحات بیشتر در بخش پایش شبکه نشان داده می‌شود. وقتی DPC گزارش‌گیری شبکه را غیرفعال کند، اعلان ناپدید می‌شود.

افزودن ثبت گزارش شبکه به DPC

برای کمک به سرپرستان فناوری اطلاعات در بررسی گزارش‌های شبکه، «کنترل‌کننده خط‌مشی دستگاه» شما باید بتواند تکالیف زیر را تکمیل کند:

  • روشن و خاموش کردن گزارش‌گیری شبکه.
  • وقتی دسته جدیدی آماده شد، گزارش‌های ضبط‌شده را بازیابی کنید.
  • داده‌های مفید موجود در گزارش‌ها را به سرور ارسال کند.

الزامات

گزارش‌گیری شبکه در Android نسخه ۸.۰ (سطح میانای برنامه‌سازی کاربردی ۲۶) یا بالاتر برای مالک دستگاه و Android نسخه ۱۲ (سطح میانای برنامه‌سازی کاربردی ۳۱) یا بالاتر برای مالک نمایه مدیریت‌شده دردسترس است. قبل‌از ثبت فعالیت شبکه، «کنترل‌کننده خط‌مشی دستگاه» شما باید بررسی کند که آیا مالک دستگاه است یا مالک نمایه یک نمایه مدیریت‌شده. گزارش‌های شبکه در مالک دستگاه با نمایه کاری شامل فعالیت شبکه در نمایه شخصی نمی‌شود، اگر توسط مالک نمایه فعال شده باشد.

فعال کردن گزارش‌گیری شبکه

برای شروع ثبت فعالیت شبکه، روش setNetworkLoggingEnabled() DevicePolicyManager را فراخوانی کنید و true را به‌عنوان شناسه enabled ارسال کنید. ‫DPC شما می‌تواند isNetworkLoggingEnabled() را فراخوانی کند تا بررسی کند که آیا فعالیت شبکه ثبت می‌شود یا نه.

پس‌از اینکه DPC شما گزارش‌گیری شبکه را فعال کرد، ممکن است مدتی طول بکشد تا اولین دسته گزارش‌ها آماده شود. شاید بخواهید انتظارات تحویل را برای سرپرستان فناوری اطلاعات در میانای کاربر خود تنظیم کنید.

برای توقف ثبت فعالیت شبکه، با setNetworkLoggingEnabled() تماس بگیرید و false را ارسال کنید. وقتی سرپرست فناوری اطلاعات ثبت گزارش شبکه را خاموش می‌کند، سیستم همه گزارش‌های جمع‌آوری‌شده و گزارش‌نشده را حذف می‌کند.

بازیابی گزارش‌ها

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 همه آن‌ها را بدون مشکل پردازش کرده است نگه دارید.

پردازش هرگونه گزارش

یک دسته از گزارش‌ها معمولاً شامل ترکیبی از نمونه‌های DnsEvent و ConnectEvent است. برای آشنایی بیشتر با فیلدهای داده جستجوهای ساناد و اتصال‌های شبکه، به گزارش‌های رویداد مراجعه کنید. رویدادها به‌ترتیب زمانی هستند و هر دسته بیش‌از ۱۲۰۰ رویداد ندارد.

پس‌از تماس برای بازیابی گزارش‌ها، بررسی کنید که مقدار برگشتی null نباشد. اگر یکی از موارد زیر اتفاق بیفتد، مقدار ممکن است null باشد:

  • دسته‌ای که با کد دسته نشان داده شده است دیگر دردسترس نیست. DPC شما نمی‌تواند دسته را بازیابی کند و باید منتظر دسته بعدی بماند.
  • سرپرست فناوری اطلاعات گزارش‌گیری شبکه را غیرفعال کرده است.

مثال ساده‌شده زیر نشان می‌دهد که چگونه DPC ممکن است نام‌های میزبان ساناد را که حل شده‌اند استخراج کند. 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 (سطح میانای برنامه‌سازی کاربردی ۲۸) یا بالاتر گنجانده شده‌اند دریافت کنید. چون شناسه برای هر رویداد به‌طور یکنواخت افزایش می‌یابد، می‌توانید به سرپرستان فناوری اطلاعات کمک کنید تا شکاف‌های موجود در گزارش‌هایشان را شناسایی کنند. هرگاه DPC گزارش‌گیری را فعال کند یا دستگاه بازراه‌اندازی شود، سیستم شناسه را بازنشانی می‌کند.

«کنترل‌کننده خط‌مشی دستگاه» شما می‌تواند کل مجموعه را به سرور ارسال کند یا ممکن است تصمیم بگیرید رویدادها را در دستگاه فیلتر کنید. برای مثال، ممکن است گزارش‌دهی فهرست مجاز را برای سرپرستان فناوری اطلاعات ارائه دهید.

توسعه و آزمایش

هنگام توسعه و آزمایش، ممکن است بخواهید بدون نیاز به مرور صدها صفحه وب، فراخوانی‌های برگشتی onNetworkLogsAvailable() را دریافت کنید. در Android نسخه ۹.۰ (سطح میانای برنامه‌سازی کاربردی ۲۸) یا بالاتر، می‌توانید چند درخواست شبکه نمونه ایجاد کنید و سیستم را مجبور کنید تا فراخوان گزارش‌های دردسترس را ارسال کند. فرمان پل اشکال‌زدایی Android (adb) زیر را در پایانه‌تان اجرا کنید:

adb shell dpm force-network-logs

سیستم تعداد دفعات استفاده از ابزار را محدود می‌کند و هرگونه کندی عمدی را در خروجی پایانه گزارش می‌دهد. اگر گزارشی برای بازیابی وجود نداشته باشد، DPC شما فراخوانی برگشتی دریافت نمی‌کند.