التقاط حِزم البيانات باستخدام Pyspinel

عرض المصدر على GitHub

يتناول هذا الدليل كيفية ضبط Wireshark وتشغيل Pyspinel لرصد الحِزم من شبكة Thread.

لاستخدام المكوّن الإضافي extcap في Wireshark لاختبار الحزم، يُرجى الاطّلاع على مقالة اختبار الحزم باستخدام extcap.

إعداد بيئة أداة الاستماع

قبل البدء، عليك إكمال الخطوات التالية:

إنشاء أداة الاستكشاف

أنشئ جهاز NCP وفلشّه ليستخدم كمجسِّم بيانات، باستخدام الإخراج الثنائي ot-rcp.

Nordic nRF52840

لإعداد مثال Nordic nRF52840 لاستخدامه كجهاز تحليل، يمكنك استنساخ openthread/ot-nrf528xx وإعداد بيئة الإنشاء:

git clone https://github.com/openthread/ot-nrf528xx --recursive
./script/bootstrap

اضبط معدل نقل البيانات على 460800. ابحث عن السطر #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 في src/nrf52840/transport-config.h، واستبدِله بـ #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800.

إنشاء الملف الثنائي:

./script/build nrf52840 UART_trans

حوِّل الإخراج الثنائي ot-rcp إلى سداسي عشري:

arm-none-eabi-objcopy -O ihex build/bin/ot-rcp ot-rcp.hex

برمِّج ملف ot-rcp.hex على لوحة nRF52840 كما هو موضّح بالتفصيل في مقالة برمجة لوحة nRF52840.

أوقِف جهاز التخزين الضخم (MSD) على nRF52840 لتجنُّب مشاكل تتعلّق بفساد البيانات أو فقدانها عند استخدام منفذ تصحيح الأخطاء:

expect <<EOF
spawn JLinkExe
expect "J-Link>"
send "msddisable\n"
expect "Probe configured successfully."
exit
EOF
spawn JLinkExe
SEGGER J-Link Commander V6.42b (Compiled Feb  5 2019 17:35:31)
DLL version V6.42b, compiled Feb  5 2019 17:35:20
 
Connecting to J-Link via USB...O.K.
Firmware: J-Link OB-SAM3U128-V2-NordicSemi compiled Jan  7 2019 14:07:15
Hardware version: V1.00
S/N: 683411111
VTref=3.300V
 
Type "connect" to establish a target connection, '?' for help
J-Link>msddisable
Probe configured successfully.

خصائص شبكة Thread

قبل المتابعة، احصل على السمات التالية لشبكة Thread التي تريد التنصت إليها. ستحتاج إلى هذه البرامج لضبط إعدادات Wireshark وتشغيل أداة التتبُّع Pyspinel.

بادئة Mesh المحلية

للحصول على بادئة Mesh Local من جهاز في شبكة Thread المستهدَفة:

  1. باستخدام واجهة سطر أوامر OpenThread:

    dataset active
    Mesh Local Prefix: fd33:3333:3344:0/64
    

  2. استخدام wpanctl مع وحدة تحكّم في حدود الشبكة:

    wpanctl getprop IPv6:MeshLocalPrefix
    IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"
    

  3. باستخدام واجهة المستخدم الرسومية على الويب لبرنامج OTBR، اختَر الحالة. يتم إدراج بادئة Mesh Local (الشبكة المحلية) بالتنسيق IPv6:MeshLocalPrefix، تمامًا مثل wpanctl.

القناة

للحصول على القناة من جهاز في شبكة Thread المستهدفة:

  1. باستخدام واجهة سطر الأوامر OpenThread:

    channel
    15
    

  2. استخدام wpanctl مع وحدة تحكّم في حدود الشبكة:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. باستخدام واجهة المستخدم الرسومية على الويب لبرنامج OTBR، اختَر الحالة. تم إدراج القناة على النحو التالي: NCP:Channel، تمامًا مثل wpanctl.

مفتاح الشبكة

يستخدم Wireshark مفتاح شبكة Thread لفك تشفير الحِزم بعد التقاطها. للحصول على مفتاح الشبكة من جهاز في شبكة Thread المستهدفة:

  1. باستخدام واجهة سطر أوامر OpenThread:

    networkkey
    33334444333344443333444433334444
    

  2. استخدام wpanctl مع وحدة تحكّم في حدود الشبكة:

    wpanctl getprop Network:Key
    Network:Key = [33334444333344443333444433334444]
    

لا يتوفّر مفتاح شبكة Thread في واجهة المستخدم الرسومية على الويب لبروتوكول OTBR.

خيارات أداة التتبُّع

الخيارات
-u or --uart
القيمة التلقائية
لا شيء: يجب تقديم هذا الخيار إذا كنت تستخدم جهازًا مزوّدًا بخط اتصال تسلسلي وليس بمقبس.
الوصف
العلامة -u أو --uart متبوعة بمسار جهاز مثل /dev/ttyUSB0
-c or --channel
القيمة التلقائية
11
الوصف
العلامة -c أو --channel متبوعة بالقناة التي تم ضبطها على شبكة Thread، والتي يتم استخدامها لفحص الحِزم
--no-reset
القيمة التلقائية
تلغي هذه العلامة السلوك التلقائي.
الوصف
يجب استخدام العلامة --no-reset إذا كان جهاز NCP متصلاً بالمضيف من خلال اتصال USB الأصلي.
--crc
القيمة التلقائية
تلغي هذه العلامة السلوك التلقائي.
الوصف
يجب استخدام العلامة --crc للأنظمة الأساسية، مثل لوحات Thread من TI وNordic Semiconductor. تعيد العلامة احتساب CRC لتجنُّب تحذير "تسلسل تحقُّق الإطار (FCS) غير صالح" في Wireshark.
-b or --baudrate
القيمة التلقائية
115200
الوصف
يتم استخدام العلامة -b أو --baudrate لإلغاء معدل نقل البيانات التلقائي. اضبط هذه القيمة على سرعة نقل البيانات نفسها المستخدَمة مع إصدار وحدة التحكّم في الطاقة (ننصح باستخدام القيمة 460800).
--rssi
القيمة التلقائية
تلغي هذه العلامة السلوك التلقائي.
الوصف
تُستخدَم العلامة --rssi لضمان تضمين RSSI في إخراج pcap. يجب استخدام هذا العلامة إذا كان خيار تنسيق TI CC24xx FCS مفعّلاً في Wireshark.
--tap
القيمة التلقائية
تلغي هذه العلامة السلوك التلقائي.
الوصف
يحدِّد العلامة --tap DLT_IEEE802_15_4_TAP(283) لتنسيق الإطار، مع عنوان زائف يحتوي على عناصر بيانات طول متغير (TLV) مع بيانات وصفية (مثل FCS وRSSI وLQI وChannel). في حال عدم تحديده، سيتم استخدامDLT_IEEE802_15_4_WITHFCS(195) بشكلٍتلقائي مع RSSI وLQI الإضافيَين بعد PHY إطار مباشرةً، كما هو الحال في تنسيق TI CC24xx FCS. يجب استخدام هذه العلامة إذا كان خيار ITU-T CRC-16 مفعَّلاً في Wireshark. إذا لم يكن هذا الخيار مفعّلاً في Wireshark، لا تستخدِم هذا العلامة.

تشغيل أداة الاستكشاف

احرص على استخدام مسار الجهاز المحدّد لوحدة التحكّم في الطاقة (NCP) والقناة لشبكة Thread التي تحاول اعتراضها.

في حال اتّباع هذا الدليل، يجب إرفاق لوحة nRF52840 DK بالجهاز المضيف من خلال منفذ تصحيح الأخطاء، كما هو موضّح في مقالة فلاش برمجة nRF52840. لتشغيل أداة التتبُّع Pyspinel، استخدِم العلامة -b لتحديد معدل نقل البيانات (إذا تم تغييره من الإعداد التلقائي) واحذف العلامة --no-reset.

في حال ضبط Wireshark لعرض RSSI، يجب أيضًا تضمين العلامة --rssi عند تشغيل أداة التتبُّع. على سبيل المثال، لرصد القناة 15 باستخدام جهاز تم تثبيته في /dev/ttyACM0 مع تضمين RSSI في إخراج Wireshark:

cd path-to-pyspinel
python sniffer.py -c 15 -u /dev/ttyACM0 --crc --rssi -b 460800 | wireshark -k -i -

من المفترض أن تتمكّن الآن من عرض الحِزم والبروتوكولات ذات الصلة بهذه الإعدادات في Wireshark:

Wireshark Capture

راجِع مرجع أدوات فحص Spinel للحصول على مزيد من المعلومات حول تشغيل أداة فحص Pyspinel.

اتصال USB أصلي

يتطلب استخدام منفذ USB في nRF52840 DK ot-rcp ثنائي الترميز أن يتم إنشاؤه باستخدام USB_trans:

./script/build nrf52840 USB_trans
فلش جهاز nRF52840 DK، وربطه بالجهاز المضيف من خلال منفذ USB، ثم استخدام العلامة --no-reset وحذف العلامة -b عند تشغيل أداة الاستماع:

python sniffer.py -c 15 -u /dev/ttyACM0 --crc --no-reset --rssi | wireshark -k -i -

الموارد

للحصول على أدوات إضافية من Nordic، يُرجى الرجوع إلى Nordic Semiconductor — Thread Sniffer based on nRF52840 with Wireshark.