במדריך הזה נסביר איך להגדיר את Wireshark ולהריץ את Pyspinel כדי לרחרח חבילות מרשת Thread.
כדי להשתמש בפלאגין extcap של Wireshark לצורך ניטור חבילות, אפשר לעיין במאמר ניטור חבילות באמצעות extcap.
הגדרת סביבת הניטור
לפני שמתחילים, צריך לבצע את השלבים הבאים:
- כאן מפורטות הדרישות ללכידת חבילות.
- מתקינים ומגדירים את Wireshark.
- התקנה של Pyspinel ויחסי התלות ללא extcap.
פיתוח הסניפר
פיתוח ומעבר (flash) של מכשיר NCP שישמש כמנתח באמצעות הפלט הבינארי ot-rcp
.
Nordic nRF52840
כדי להגדיר את הדוגמה של Nordic nRF52840 לשימוש כמנתח תעבורת נתונים, מעתיקים את openthread/ot-nrf528xx
ומגדירים את סביבת ה-build:
git clone https://github.com/openthread/ot-nrf528xx --recursive
./script/bootstrap
מגדירים את קצב הנתונים (baud rate) כ-460800. מחפשים את השורה #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200
ב-src/nrf52840/transport-config.h
ומחליפים אותה ב-#define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800
.
יצירת קובץ ה-binary:
./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.
כדי למנוע בעיות של פגיעה בנתונים או ירידה בנתונים במהלך השימוש ביציאת ניפוי הבאגים, משביתים את Mass Storage Device (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 Local Prefix
כדי לקבל את הקידומת המקומית של רשת Mesh ממכשיר ברשת Thread היעד:
באמצעות ה-CLI של OpenThread:
dataset active
Mesh Local Prefix: fd33:3333:3344:0/64שימוש ב-
wpanctl
עם NCP:wpanctl getprop IPv6:MeshLocalPrefix
IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"בוחרים באפשרות סטטוס בממשק המשתמש הגרפי של OTBR באינטרנט. התחילית המקומית של Mesh מופיעה בתור IPv6:MeshLocalPrefix, בדומה ל-
wpanctl
.
ערוץ
כדי לקבל את הערוץ ממכשיר ברשת היעד בפרוטוקול Thread:
באמצעות ה-CLI של OpenThread:
channel
15שימוש ב-
wpanctl
עם NCP:wpanctl getprop NCP:Channel
NCP:Channel = 15בוחרים באפשרות סטטוס בממשק המשתמש הגרפי של OTBR באינטרנט. הערוץ מופיע בתור NCP:Channel, בדומה לערוץ
wpanctl
.
מפתח רשת
Wireshark משתמש במפתח הרשת של Thread כדי לפענח חבילות אחרי תיעוד. כדי לקבל את מפתח הרשת ממכשיר ברשת Thread היעד:
באמצעות ה-CLI של OpenThread:
networkkey
33334444333344443333444433334444שימוש ב-
wpanctl
עם NCP:wpanctl getprop Network:Key
Network:Key = [33334444333344443333444433334444]
מפתח הרשת של Thread לא זמין בממשק המשתמש הגרפי באינטרנט של OTBR.
אפשרויות לניפוי נתונים
אפשרויות | |||||
---|---|---|---|---|---|
-u or --uart |
|
||||
-c or --channel |
|
||||
--no-reset |
|
||||
--crc |
|
||||
-b or --baudrate |
|
||||
--rssi |
|
||||
--tap |
|
הפעלת הסניפר
חשוב להשתמש בנתיב המכשיר הספציפי של ה-NCP ובערוץ של רשת Thread שאתם מנסים לרחרח.
אם פועלים לפי המדריך הזה, צריך לחבר את nRF52840 DK למכונה המארחת דרך יציאת ניפוי הבאגים, כפי שמתואר בקטע אחזור נתונים (Flash) של nRF52840. כדי להריץ את הסניפר של Pyspinel, משתמשים בדגל -b
כדי לציין את קצב ה-baud (אם הוא השתנה מברירת המחדל) ומשמטים את הדגל --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:
מידע נוסף על הפעלת הסניפר של Pyspinel זמין במאמר העזר בנושא סניפר Spinel.
חיבור USB מקורי
כדי להשתמש ביציאת ה-USB של nRF52840 DK, צריך ליצור את קובץ ה-binary ot-rcp
של OpenThread באמצעות USB_trans
:
./script/build nrf52840 USB_trans
מחליפים את קובץ הקושחה של nRF52840 DK, מחברים אותו למחשב המארח דרך יציאת ה-USB, ואז משתמשים בדגל --no-reset
אבל משמיטים את הדגל -b
כשמריצים את ה-sniffer:
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.