بوییدن بسته با پایسپینل

مشاهده منبع در GitHub

این راهنما نحوه پیکربندی Wireshark و اجرای Pyspinel را برای شناسایی بسته‌ها از شبکه Thread پوشش می‌دهد.

برای استفاده از افزونه Wireshark extcap برای sniffing بسته، به Packet Sniffing با استفاده از extcap مراجعه کنید.

محیط sniffer را تنظیم کنید

قبل از شروع، مراحل زیر را کامل کنید:

اسنیفر را بسازید

با استفاده از خروجی باینری ot-rcp یک دستگاه NCP بسازید و فلش کنید تا به عنوان sniffer عمل کند.

نوردیک nRF52840

برای راه‌اندازی مثال Nordic nRF52840 برای استفاده به‌عنوان sniffer، 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 که می خواهید sniff کنید، دریافت کنید. برای پیکربندی Wireshark و اجرای sniffer Pyspinel به آنها نیاز دارید.

پیشوند محلی مش

برای دریافت پیشوند محلی Mesh از دستگاهی در شبکه 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. با استفاده از رابط کاربری گرافیکی وب OTBR، وضعیت را انتخاب کنید. پیشوند محلی Mesh به عنوان IPv6 فهرست شده است: MeshLocalPrefix مشابه wpanctl .

کانال

برای دریافت کانال از دستگاهی در شبکه موضوع هدف:

  1. با استفاده از OpenThread CLI:

    channel
    15
    

  2. استفاده از wpanctl با NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. با استفاده از رابط کاربری گرافیکی وب OTBR، وضعیت را انتخاب کنید. کانال به عنوان NCP:Channel مشابه wpanctl فهرست شده است.

کلید شبکه

کلید شبکه Thread توسط Wireshark برای رمزگشایی بسته ها پس از ضبط استفاده می شود. برای دریافت کلید شبکه از دستگاهی در شبکه موضوع هدف:

  1. با استفاده از OpenThread CLI:

    networkkey
    33334444333344443333444433334444
    

  2. استفاده از wpanctl با NCP:

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

کلید شبکه Thread در رابط کاربری گرافیکی وب OTBR موجود نیست.

گزینه های Sniffer

گزینه ها
-u or --uart
مقدار پیش فرض
هیچ - اگر از دستگاهی با اتصال سریال و نه اتصال سوکت استفاده می کنید، باید ارائه شود.
توضیحات
پرچم -u یا --uart به دنبال یک مسیر دستگاه مانند /dev/ttyUSB0 .
-c or --channel
مقدار پیش فرض
11
توضیحات
پرچم -c یا --channel به دنبال کانالی که در شبکه Thread شما پیکربندی شده است، که بسته‌ها را روی آن بو می‌کشند.
--no-reset
مقدار پیش فرض
این پرچم رفتار پیش فرض را لغو می کند.
توضیحات
اگر دستگاه NCP شما با اتصال USB بومی به میزبان متصل باشد، پرچم --no-reset لازم است.
--crc
مقدار پیش فرض
این پرچم رفتار پیش فرض را لغو می کند.
توضیحات
پرچم --crc برای پلتفرم هایی مانند تخته های TI و Nordic Semiconductor Thread مورد نیاز است. پرچم CRC را مجدداً محاسبه می کند تا از هشدار "Bad 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) را برای قالب فریم، با یک سرصفحه کاذب حاوی TLV با ابرداده (مانند 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 باید توسط پورت اشکال زدایی به دستگاه میزبان متصل شود، همانطور که در Flash the nRF52840 توضیح داده شده است. برای اجرای sniffer Pyspinel، از پرچم -b برای تعیین نرخ باود (اگر از حالت پیش‌فرض تغییر کرده بود) استفاده کنید و پرچم --no-reset را حذف کنید.

اگر Wireshark را برای نمایش RSSI پیکربندی کنید ، هنگام اجرای ابزار sniffer باید پرچم --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 Capture

برای اطلاعات بیشتر در مورد اجرای sniffer Pyspinel به مرجع Spinel Sniffer مراجعه کنید.

اتصال USB بومی

برای استفاده از پورت USB nRF52840 DK باید باینری OpenThread ot-rcp با USB_trans ساخته شود:

./script/build nrf52840 USB_trans
nRF52840 DK را فلش کنید، آن را از طریق پورت USB به دستگاه میزبان متصل کنید ، سپس از پرچم --no-reset استفاده کنید اما هنگام اجرای sniffer پرچم -b را حذف کنید:

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

منابع

برای ابزارهای Nordic اضافی، به Nordic Semiconductor — Thread Sniffer بر اساس nRF52840 با Wireshark مراجعه کنید.