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

الاطّلاع على المصدر على GitHub

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

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

إعداد بيئة الالتقاط

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

أنشِئ قصّتَي الشرطة

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

شمال nRF52840

لإعداد مثال 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. .

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

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

  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:قناة مشابهة لـ wpanctl.

مفتاح الشبكة

يستخدم Wireshark مفتاح شبكة Thread لفك تشفير الحزم بعد الحصول عليها. للحصول على مفتاح الشبكة من جهاز في شبكة 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 المضمنة في مخرجات pcap. يجب عليك استخدام هذه العلامة إذا TI CC24xx FCS التنسيق في Wireshark.
--tap
القيمة التلقائية
تلغي هذه العلامة السلوك التلقائي.
الوصف
تحدّد العلامة --tap DLT_IEEE802_15_4_TAP(283) لتنسيق الإطار، مع عنوان زائف يحتوي على فيديوهات قصيرة مع بيانات وصفية (مثل FCS وRSSI وLQI والقناة). إذا لم يتم تحديده، سيتم استخدام 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

راجِع أداة استقصاء Spinnel. المرجع الخاص بـ مزيد من المعلومات حول تشغيل أداة التقاط Pyspinel.

اتصال 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 -

الموارد

للحصول على المزيد من أدوات شمال أوروبا، راجِع أشباه الموصلات — Thread تعتمد Sniffer على nRF52840 مع Wireshark.