חיטוט חבילות עם פיסול

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

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

כדי להשתמש בפלאגין של חשיפת Wireshark לחילוץ חבילות, יש לעיין בהצלחת חבילות באמצעות סגירה.

הגדרת סביבת הצלפה

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

בניית המפרש

בנה והבהב מכשיר 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

הבזק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. הם ישמשו לתצורת Wireshark ולהפעלת ה-syspinel sisper.

קידומת מקומית מסוג Mesh

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

  1. שימוש ב-OpenThread CLI:

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

ערוץ

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

  1. שימוש ב-OpenThread CLI:

    channel
    15
    

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

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

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

מפתח רשת

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

  1. שימוש ב-OpenThread CLI:

    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 ולוחות מוליכים למחצה של Nordic. הדגל מחשב מחדש את ה-CRC כדי להימנע מאזהרה מסוג 'FCS גרוע' (רצף בדיקת פריימים) ב-Wireshark.
-b or --baudrate
ערך ברירת המחדל
115200
תיאור
הסימון -b או --baudrate משמש לשינוי קצב ברירת המחדל של השידור. יש להגדיר את ערך הפלט הזה לאותו קצב שידור שבו משתמשים ב-build ה-NCP (מומלץ להשתמש ב-460800).
--rssi
ערך ברירת המחדל
סימון זה מבטל את התנהגות ברירת המחדל.
תיאור
הסימון --rssi משמש כדי להבטיח שה-RSSI נכלל בפלט של ה-pcap. יש להשתמש בסימון הזה אם האפשרות פורמט 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 ובערוץ עבור רשת השרשור שאתם מנסים לריח.

אם המדריך הזה פועל, יש לחבר את ה-nRF52840 DK אל המחשב המארח באמצעות יציאת ניפוי הבאגים, כפי שמתואר ב-Flash ה-nRF52840. כדי להפעיל את ה-Syspinel snifer, יש להשתמש בדגל -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

עיינו בחומר העזר לחיתוך כלבלב כדי לקבל מידע נוסף על הפעלת Synpinel Snifer.

חיבור USB מקורי

כדי להשתמש ביציאת ה-USB מסוג nRF52840 DK נדרש OpenThreadot-rcp בינאריים לבנייתםUSB_trans :

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

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

מקורות מידע

לכלים נורדיים נוספים, עיין במוליך למחצה נורדי – שרשור, מבוסס על nRF52840 עם Wireshark.