פילינג ספירלי

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

במדריך הזה נסביר איך להגדיר את Wireshark ולהריץ Pyspinel לחבילות נתונים מרשת של Thread.

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

הגדרת סביבת הריח

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

בניית הסנייף

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

נורדי nRF52840

כדי להגדיר את הדוגמה nRF52840 הנורדית לשימוש כ-nnipper, יש לשכפל את 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

הבליט את הקובץ 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.

קידומת של רשת מקומית

כדי לקבל את הקידומת של רשת מקומית ממכשיר ברשת של רשת 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. באמצעות ה-GUI של האינטרנט, בוחרים באפשרות סטטוס. הקידומת של Mesh Local מופיעה בתור IPv6:MeshLocalPrefix באופן דומה ל-wpanctl.

ערוץ

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

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

    channel
    15
    

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

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. באמצעות ה-GUI של האינטרנט, בוחרים באפשרות סטטוס. הערוץ מופיע בתור NCP:Channel באופן דומה ל-wpanctl.

מפתח רשת

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

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

    networkkey
    33334444333344443333444433334444
    

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

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

מפתח השרשור לא זמין ב-GUI של האינטרנט ב-OTBR.

אפשרויות להגדלה

אפשרויות
-u or --uart
ערך ברירת מחדל
ללא. יש לציין את האישור הזה אם משתמשים במכשיר עם חיבור טורי ולא חיבור לשקע.
תיאור
הדגל -u או --uart ולאחר מכן נתיב מכשיר כמו /dev/ttyUSB0.
-c or --channel
ערך ברירת מחדל
11
תיאור
הדגל -c או --channel ולאחר מכן הערוץ שהוגדר ברשת השרשורים, שבה אפשר לעקוב אחר חבילות.
--no-reset
ערך ברירת מחדל
הדגל הזה מבטל את התנהגות ברירת המחדל.
תיאור
הדגל --no-reset נדרש אם מכשיר ה-NCP מחובר למארח עם חיבור ה-USB המקורי.
--crc
ערך ברירת מחדל
הדגל הזה מבטל את התנהגות ברירת המחדל.
תיאור
הדגל --crc נדרש עבור פלטפורמות כמו TI (לוחות TI) ולוחות נורדיים למוליכות מוליכים (Semiconductor Threads). הדגל מחשב מחדש את ה-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, ערוץ). אם לא צוין אחרת, המערכת תשתמש ב-DLT_IEEE802_15_4_WITHFCS(195) כברירת מחדל עם ה-RSSI וה-LQI הנוספים בהתאם למסגרת PHY ישירות, כמו בפורמט TI CC24xx FCS. חובה להשתמש בסימון הזה אם האפשרות ITU-T CRC-16 מופעלת ב-Wireshark. אם האפשרות הזו לא מופעלת ב-Wireshark, אין להשתמש בסימון הזה.

הפעלת הריח

חשוב להשתמש בנתיב המכשיר הספציפי ל-NCP ובערוץ של רשת השרשורים שאתם מנסים לסרוק.

אם המדריך הזה פועל, יש לחבר את ה-nRF52840 DK למכונה המארחת באמצעות יציאת ניפוי הבאגים, כפי שמתואר בקטע יצירת Flash עם nRF52840. כדי להריץ את סניפי Pyspinel, השתמשו בסימון -b כדי לציין את קצב החשיפה (אם הוא השתנה מברירת המחדל) והשמיטו את הדגל --no-reset.

אם הגדרת Wireshark להצגת RSSI, עליך לכלול גם את הדגל --rssi בעת הפעלת כלי ה-niffer. לדוגמה, כדי לבצע 'ריח' בערוץ 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:

לכידת כריש

בחומר העזר בנושא סנפיר סנפיר תוכלו לעיין בחומר העזר בנושא סנפיר מסתובב.

חיבור USB מקורי

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

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

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

משאבים

לכלים נורדיים נוספים, כדאי לעיין במאמר Nordic Semiconductor — Thread Cniffer based on nRF52840 with Wireshark.