تنشّق الحزمة

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

يتناول هذا الدليل كيفية تهيئة Wireshark وتشغيل Pyspinel لشم الحزم من شبكة Thread.

لاستخدام المكون الإضافي Wireshark لشم الحزم، راجع شم الحزم باستخدام extcap.

إعداد بيئة الشم

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

إنشاء جهاز الشمّ

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

اسكندنافية nRF52840

لإعداد مثال nRF52840 من Nordic لاستخدامه كجهاز استنساخ، 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 كما هو موضَّح بالتفصيل في Flash 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.

بادئة شبكة متداخلة محلية

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

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

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

  2. استخدام wpanctl مع NCP:

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

  3. اختَر الحالة باستخدام واجهة مستخدم الويب التصويرية على الويب (OTBR). وتكون بادئة الشبكة المتداخلة المحلية مدرجة كـ IPv6:MeshLocalPrefix على النحو wpanctl.

القناة

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

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

    channel
    15
    

  2. استخدام wpanctl مع NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. اختَر الحالة باستخدام واجهة مستخدم الويب التصويرية على الويب (OTBR). وتكون القناة مُدرَجة على أنها NCP:Channel على غرار wpanctl.

مفتاح الشبكة

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

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

    networkkey
    33334444333344443333444433334444
    

  2. استخدام wpanctl مع NCP:

    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 للأنظمة الأساسية، مثل TI ولوحات تركيب وصلات سلسلة بلدان شمال أوروبا. تعمل العلامة على إعادة حساب رمز CRC لتجنب ظهور تحذير "FCS غير مناسب" (تسلسل فحص الإطار) في Wireshark.
-b or --baudrate
القيمة التلقائية
115200
الوصف
يتم استخدام العلامة -b أو --baudrate لإلغاء المعدل التلقائي للباود. عيّن هذه القيمة على معدل الباود المستخدم في إصدار NCP (نوصي باستخدام الرقم 460800).
--rssi
القيمة التلقائية
تلغي هذه العلامة السلوك التلقائي.
الوصف
يتم استخدام العلامة --rssi للتأكّد من أنّ RSSI مضمّن في إخراج gcap. ويجب استخدام هذه العلامة في حال تفعيل خيار تنسيق 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 بالجهاز المضيف من خلال منفذ تصحيح الأخطاء، كما هو موضَّح في Flash 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

يمكنك الرجوع إلى Spinel sniffer المرجع لمزيد من المعلومات حول تشغيل Pyspinel sniffer.

اتصال USB أصلي

يتطلب استخدام منفذ USB nRF52840 DK إنشاء برنامج ثنائي لبرنامج OpenThread 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 -

المراجِع

للحصول على أدوات بلدان الشمال الإسكندنافي الإضافية، يُرجى الرجوع إلى شبه موصل الشمال — سنفير استنادًا إلى nRF52840 مع Wireshark.