לכידת מנות באמצעות פיספינל

הצגת המקור ב-GitHub

מדריך זה מסביר כיצד להגדיר Wireshark ולהריץ את Pyspinel כדי לסרוק חבילות מרשת של פרוטוקול Thread.

כדי להשתמש בפלאגין extcap של Wireshark ל-sniffing של חבילות, אתם יכולים לקרוא את המאמר לכידת חבילות באמצעות extcap.

הגדרה של סביבת Sniffer

לפני שמתחילים, צריך לבצע את השלבים הבאים:

בונים את המטווח

יצירה ופלאש של מכשיר NCP שישמש כמאגר הרחה, באמצעות הפלט הבינארי של ot-rcp.

nRF52840 נורדי

כדי להגדיר את הדוגמה nRF52840 הנורדית לשימוש כמצולם, שכפול openthread/ot-nrf528xx ומגדירים את סביבת ה-build:

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

Flash את הקובץ 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 ממכשיר ברשת היעד של פרוטוקול Thread:

  1. באמצעות ה-CLI של 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 Web GUI, בוחרים באפשרות Status. הקידומת המקומית של Mesh מופיעה בתור IPv6:MeshLocalPrefix כמו wpanctl.

ערוץ

כדי לאחזר את הערוץ ממכשיר ברשת היעד של פרוטוקול Thread:

  1. באמצעות ה-CLI של OpenThread:

    channel
    15
    

  2. שימוש ב-wpanctl עם NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. באמצעות OTBR Web GUI, בוחרים באפשרות Status. הערוץ רשום בתור NCP:Channel, בדומה ל-wpanctl.

מפתח רשת

מפתח רשת פרוטוקול Thread משמש את Wireshark לפענוח חבילות לאחר וצילום. כדי לקבל את מפתח הרשת ממכשיר ברשת היעד של פרוטוקול Thread:

  1. באמצעות ה-CLI של OpenThread:

    networkkey
    33334444333344443333444433334444
    

  2. שימוש ב-wpanctl עם NCP:

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

מפתח רשת פרוטוקול Thread לא זמין ב-OTBR Web GUI.

אפשרויות סינון

אפשרויות
-u or --uart
ערך ברירת המחדל
לא – יש לציין אם אתם משתמשים במכשיר עם חיבור עם יציאה טורית ולא חיבור לשקע.
תיאור
הדגל -u או --uart ואחריו נתיב של מכשיר כמו /dev/ttyUSB0.
-c or --channel
ערך ברירת המחדל
11
תיאור
הדגל -c או --channel הופעל הערוץ שהוגדר ברשת בפרוטוקול Thread, והרחה של חבילות.
--no-reset
ערך ברירת המחדל
הסימון הזה מבטל את התנהגות ברירת המחדל.
תיאור
הדגל --no-reset נדרש אם ה-NCP שלך שהמכשיר מחובר למארח באמצעות התקן ה-USB המקורי חיבור כזה.
--crc
ערך ברירת המחדל
הסימון הזה מבטל את התנהגות ברירת המחדל.
תיאור
הדגל --crc נדרש בפלטפורמות כמו לוחות Thread של TI ומוליכים למחצה של מוליכים למחצה. הדגל מחשב מחדש את ה-CRC כדי להימנע מ-'FCS גרוע' (בדיקת פריימים רצף) ב-Wireshark.
-b or --baudrate
ערך ברירת המחדל
115200
תיאור
נעשה שימוש בדגל -b או --baudrate כדי לשנות את קצב באוד המוגדר כברירת מחדל. הגדרת הערך הזהה קצב באוד שנעשה בו שימוש עם ה-NCP build (מומלץ להשתמש ב-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 למכונה המארחת באמצעות את יציאת ניפוי הבאגים, כפי שמתואר בהסבר על Flash nRF52840. כדי להריץ את מגרדת פיסיננל, להשתמש בדגל -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 הפניה עבור מידע נוסף על הפעלת מגרדת פיסנל.

חיבור USB מקורי

לשימוש ביציאת ה-USB מסוג nRF52840 DK יש צורך בקובץ הבינארי ot-rcp של OpenThread כדי שישולבו בעזרת USB_trans:

./script/build nrf52840 USB_trans
מבצעים Flash של ה-nRF52840 DK, מחברים אותו למכונה המארחת באמצעות ה-USB Port, ולאחר מכן משתמשים בדגל --no-reset אבל יש להשמיט את הדגל -b כשמפעילים את sniffer:

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

משאבים

לכלים נורדיים נוספים, ראו מוליכים למחצה Nordic – Thread סינון נתונים על סמך nRF52840 עם Wireshark.