تسجيل أنشطة الشبكة

يشرح هذا المستند كيفية تسجيل وحدة التحكم في سياسة الجهاز (DPC) لنشاط الشبكة. تابِع القراءة لمعرفة كيفية إضافة تسجيل الشبكة إلى وحدة التحكّم بسياسة الجهاز (DPC).

نظرة عامة

يمكن أن يساعد تسجيل نشاط الشبكة المؤسسات في اكتشاف وتتبُّع انتشار البرامج الضارة على أجهزتها. يمكن لوحدة التحكّم بسياسة الجهاز استدعاء واجهات برمجة التطبيقات لتسجيل الشبكة للإبلاغ عن اتصالات بروتوكول التحكم في الإرسال وعمليات بحث نظام أسماء النطاقات من استدعاءات شبكات النظام.

عادةً ما يسلم وحدة التحكّم بسياسة الجهاز (DPC) السجلات إلى خادم لعرضها فيها إلى مشرف تكنولوجيا المعلومات. قد تحتاج إلى معالجة السجلات بشكل أكبر على خادمك أو محليًا على الجهاز. على سبيل المثال، يمكنك إعداد قوائم نظام أسماء النطاقات المرفوضة لاكتشاف وتنبيه مشرفي تكنولوجيا المعلومات بشأن السلوك المريب.

أماكن التوفّر

تتوفّر إمكانية تسجيل الشبكة في نظام التشغيل Android 8 والإصدارات الأحدث لمالك الجهاز. تجمع هذه الخدمة بيانات عن نشاط الشبكة للجهاز في حال تفعيل هذه الميزة. وهو متوافق أيضًا في نظام التشغيل Android 12 والإصدارات الأحدث لمالك ملف شخصي مُدار وتطبيق مفوَّض مع DELEGATION_NETWORK_LOGGING. عند تفعيل مالك الملف الشخصي لتسجيل الشبكة، ستتضمّن سجلات الشبكة فقط أنشطة الشبكة للملف الشخصي للعمل ولا تجمع البيانات من الملف الشخصي.

للمزيد من المعلومات، يُرجى الاطّلاع على المستخدمون التابعون.

سجلات الأحداث

عندما يكون تسجيل الشبكة مفعَّلاً، يسجِّل نظام Android كل حدث من التطبيقات باستخدام مكتبات شبكات النظام. يسجل تسجيل الدخول إلى الشبكة نوعين من الأحداث:

  • عمليات بحث نظام أسماء النطاقات
  • اتصالات الشبكة

عمليات بحث نظام أسماء النطاقات

يسجل تسجيل الشبكة حدثًا لعمليات بحث نظام أسماء النطاقات التي تكون جزءًا من طلبات شبكة النظام. تلتقط السجلات كل طلب لنظام أسماء النطاقات يحل اسم المضيف إلى عنوان IP. ولا يتم تسجيل طلبات البحث الأخرى الداعمة لنظام أسماء النطاقات، مثل اكتشاف خادم الأسماء.

تعرض واجهات برمجة التطبيقات لتسجيل أنشطة الشبكة كل بحث لنظام أسماء النطاقات على أنّه مثيل DnsEvent. يصف الجدول 1 الحقول والقيم النموذجية المسجّلة في DnsEvent.

الجدول 1. حقول أحداث نظام أسماء النطاقات

البيانات مثال الوصف
اسم المضيف host.example.com اسم المضيف الذي تم إرساله في طلب بحث نظام أسماء النطاقات.
عناوين الإدخال 203.0.113.9، 198.51.100.25 تتناول قائمة IPv4 أو IPv6 طلب بحث نظام أسماء النطاقات الذي تم حله لاسم المضيف. لإبقاء حجم السجل قابلاً للإدارة، قد لا تشتمل النتائج على جميع عناوين IP. راجع عدد العناوين في الصف التالي.
عدد العناوين 4 عدد عناوين IP التي تم عرضها من خلال تحليل طلب البحث لنظام أسماء النطاقات. يمكنك استخدام هذا التقرير لمعرفة ما إذا كانت عناوين IP المسجَّلة هي مجموعة فرعية من النتائج. تعني القيمة 0 (صفر) أن اسم المضيف لم يتم تحويله إلى عنوان IP.
اسم الحزمة com.android.chrome اسم حزمة التطبيق الذي أجرى طلب نظام أسماء النطاقات.
الطابع الزمني 1506297600000 تسجيل طابع زمني عند إجراء بحث نظام أسماء النطاقات. القيمة هي الفاصل الزمني بالملي ثانية بين بحث نظام أسماء النطاقات ووقت منتصف الليل، في 1 كانون الثاني (يناير) 1970 حسب التوقيت العالمي المنسَّق.
رقم التعريف 25 معرّف رقمي يتزايد بشكل روتيني. يتوفّر في Android 9.0 (المستوى 28 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث.

في حين أن عمليات بحث نظام أسماء النطاقات يمكن أن تساعد مشرفي تكنولوجيا المعلومات في تتبع اتصالات الشبكة، لا يكون تسجيل الشبكة حلاً لتسجيل نظام أسماء النطاقات للأغراض العامة. فيما يلي بعض مهام نظام أسماء النطاقات التي قد يقوم بها تطبيق والتي لا يتم تسجيلها:

  • يشير ذلك المصطلح إلى التواصل مباشرةً مع خادم أسماء نظام أسماء النطاقات.
  • استدعاء مكتبة نظام أسماء نطاقات بلغة Java لإجراء طلبات بحث لنظام أسماء النطاقات.
  • تجنب طلب بحث نظام أسماء النطاقات من خلال الاتصال بعنوان IP ثابت.

اتصالات الشبكة

يسجل تسجيل الشبكة حدثًا لكل محاولة اتصال يُعد جزءًا من طلب شبكة للنظام. تلتقط السجلات اتصالات TCP الناجحة والفاشلة—ولا يتم تسجيل عمليات نقل بروتوكول حزم بيانات المستخدم (UDP).

تعرض واجهات برمجة التطبيقات لتسجيل أنشطة الشبكة كل عملية ربط على شكل مثيل ConnectEvent. يصف الجدول 2 الحقول والقيم النموذجية المسجّلة في ConnectEvent.

الجدول 2. ربط حقول الأحداث

البيانات مثال الوصف
عناوين الإدخال 2001:db8::2f:abc:0 عنوان IP الذي اتصل به الجهاز. قد يكون هذا عنوان IPv4 أو IPv6.
نقل الرقم 80 رقم منفذ TCP الذي اتصل به الجهاز.
اسم الحزمة com.android.chrome اسم حزمة التطبيق المرتبط.
الطابع الزمني 1506297600000 تسجيل طابع زمني لوقت الاتصال بالشبكة القيمة هي الفاصل الزمني بالمللي ثانية بين الاتصال منتصف الليل، في 1 كانون الثاني (يناير) 1970 حسب التوقيت العالمي المنسَّق.
رقم التعريف 26 معرّف رقمي يتزايد بشكل روتيني. يتوفّر في Android 9.0 (المستوى 28 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث.

يسجِّل تسجيل الشبكة حدثًا عندما يستدعي تطبيق مكتبات الشبكة العادية، مثل واجهات برمجة التطبيقات المدمجة في Android أو المكتبات الشائعة التابعة لجهات خارجية، للاتصال بمضيف. لا يتم تسجيل التطبيقات التي تُصدر استدعاءات النظام للتواصل مباشرةً. تذكر أنه لا يتم تسجيل شبكات UDP، لذا قد لا تظهر بعض تطبيقات بث الوسائط والمراسلة والألعاب في السجلات.

إعلام المستخدمين

ينبّه النظام مستخدمي الأجهزة إلى أنّ تسجيل أنشطة الشبكة نشط. وتظهر التحذيرات التالية للمستخدمين في الواجهة:

  • قسم في مربّع حوار إدارة الأجهزة يوضّح وحدة التحكّم بسياسة الجهاز (DPC) الذي يراقب حركة بيانات الشبكة. يظهر للمستخدمين مربّع الحوار من خلال النقر على تصنيف معلومات الجهاز المُدار في "الإعدادات السريعة".
  • هو إشعار نظام يمكن تجاهله يظهر عندما يكون المستخدم جديدًا على تسجيل الشبكة. يؤدي النقر على الإشعار إلى عرض مربّع الحوار مراقبة الجهاز مع مزيد من التوضيح في قسم مراقبة الشبكة. ويختفي الإشعار عند إيقاف وحدة التحكّم بسياسة الجهاز لتسجيل بيانات الشبكة.

إضافة تسجيل دخول الشبكة إلى وحدة التحكّم بسياسة الجهاز (DPC)

لمساعدة مشرفي تكنولوجيا المعلومات على مراجعة سجلات الشبكة، يجب أن تتوفّر إمكانية إكمال المهام التالية لوحدة التحكّم بسياسة الجهاز:

  • فعِّل ميزة تسجيل الدخول إلى الشبكة أو أوقِفها.
  • استرِد أي سجلات مسجَّلة عندما تكون دُفعة جديدة جاهزة.
  • إرسال البيانات المفيدة الموجودة في السجلات إلى خادم.

الشروط

تتوفر ميزة تسجيل الشبكة في الإصدار Android 8.0 (المستوى 26 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث لمالك الجهاز، والإصدار 31 من Android 12 (المستوى 31 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث لمالك الملف الشخصي المُدار. قبل تسجيل نشاط الشبكة، يجب أن يتحقّق وحدة التحكّم بسياسة الجهاز (DPC) مما إذا كان الجهاز مالكًا لجهاز أو مالكًا لملف شخصي مُدار. إنّ سجلات الشبكة في مالك الجهاز الذي يضم ملفًا شخصيًا للعمل لا تشتمل على نشاط الشبكة في الملف الشخصي إذا كان مالك الملف الشخصي قد تم تفعيله.

تفعيل تسجيل بيانات الشبكة

لبدء تسجيل نشاط الشبكة، استدعِ الطريقة DevicePolicyManager setNetworkLoggingEnabled() وأدخِل true كوسيطة enabled. يمكن لوحدة التحكّم بسياسة الجهاز الاتصال بالرقم isNetworkLoggingEnabled() للتحقّق مما إذا تم تسجيل نشاط الشبكة.

بعد أن يفعِّل وحدة التحكّم بسياسة الجهاز تسجيل بيانات الشبكة، قد يستغرق الأمر بعض الوقت قبل أن تصبح الدفعة الأولى من السجلّات جاهزة. قد ترغب في تحديد توقعات التسليم لمشرفي تكنولوجيا المعلومات في واجهة المستخدم الخاصة بك.

لإيقاف تسجيل أنشطة الشبكة، يُرجى الاتصال بـ setNetworkLoggingEnabled() وتمرير false. عندما يوقف مشرف تكنولوجيا المعلومات ميزة تسجيل بيانات الشبكة، يحذف النظام أي سجلّات مجمَّعة وغير مبلّغ عنها.

استرداد السجلات

يمكن لوحدة التحكّم بسياسة الجهاز استرداد السجلات على دفعات، ولا توفّر واجهات برمجة تطبيقات تسجيل الشبكة إمكانية الوصول العشوائي إلى الإدخالات الفردية السابقة. عندما تتوفّر دُفعة جديدة من السجلّات، ستتلقّى الفئة الفرعية DeviceAdminReceiver لوحدة التحكّم بسياسة الجهاز معاودة الاتصال onNetworkLogsAvailable(). ويتضمن معاودة الاتصال رمزًا مميزًا مجمّعًا يمكن لوحدة التحكّم بسياسة الجهاز استخدامه لاسترداد السجلات. تستدعي وحدة التحكّم بسياسة الجهاز طريقة 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 ...
}

Java

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. لمعرفة المزيد من المعلومات عن حقول البيانات لعمليات بحث نظام أسماء النطاقات واتصالات الشبكة، يُرجى الاطّلاع على سجلّات الأحداث. يتم ترتيب الأحداث ترتيبًا زمنيًا ولا تحتوي كل دُفعة على أكثر من 1200 حدث.

بعد إجراء المكالمة لاسترداد السجلّات، تأكَّد من أنّ القيمة المعروضة ليست null. قد تكون القيمة null في حال حدوث أي مما يلي:

  • لم تعُد الدفعة التي يمثّلها الرمز المميّز للدفع متاحة. لا يمكن لوحدة التحكّم بسياسة الجهاز استرداد الدفعة، ويجب أن ينتظروا الدفعة التالية.
  • أوقَف مشرف تكنولوجيا المعلومات تسجيل الشبكة.

يوضِّح المثال المُبسّط التالي كيف يمكن لوحدة التحكّم بسياسة الجهاز استخراج أسماء مضيف نظام أسماء النطاقات التي تم حلها. تحتاج وحدة التحكّم بسياسة الجهاز (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())
    }
}

Java

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 (المستوى 28 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. نظرًا لأن المعرّف يزداد بشكل روتيني لكل حدث، يمكنك مساعدة مشرفي تكنولوجيا المعلومات في اكتشاف الثغرات في سجلّاتهم. ويعيد النظام ضبط المعرّف عند تفعيل وحدة التحكّم بسياسة الجهاز لتسجيل الدخول أو عند إعادة تشغيل الجهاز.

يمكن لوحدة التحكّم بسياسة الجهاز إرسال المجموعة بأكملها إلى خادم أو قد تقرر فلترة الأحداث على الجهاز. على سبيل المثال، يمكنك تقديم تقارير ضمن القائمة المسموح بها لمشرفي تكنولوجيا المعلومات.

التطوير والاختبار

أثناء تطوير المنتجات واختبارها، قد تريد تلقّي طلبات استدعاء onNetworkLogsAvailable() بدون الحاجة إلى تصفّح المئات من صفحات الويب. في Android 9.0 (المستوى 28 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، يمكنك تقديم بعض نماذج طلبات الشبكة وفرض على النظام إرسال طلب استدعاء متاح في السجلات. شغِّل الأمر Android Debug Bridge (adb) التالي في المحطة الطرفية:

adb shell dpm force-network-logs

يحدّ النظام من عدد المرات التي يمكنك فيها استخدام الأداة، ويُبلغ عن أي تباطؤ مقصود في الإخراج الطرفي. إذا لم تكن هناك أي سجلّات يمكن استردادها، لن يتلقّى وحدة التحكّم بسياسة الجهاز رد اتصال.