Lặn với ống thở bằng Pyspinel

Xem nguồn trên GitHub

Hướng dẫn này trình bày cách định cấu hình Wireshark và chạy Pyspinel để đánh giá các gói từ mạng Thread.

Để sử dụng trình bổ trợ extcap của Wireshark cho việc phát hiện gói, hãy tham khảo bài viết Packet Sniffing bằng extcap.

Thiết lập môi trường hít đất

Trước khi bắt đầu, hãy hoàn thành các bước sau:

Tạo ống thở

Xây dựng và cài đặt ROM thiết bị NCP để phân phát dưới dạng trình phân tích cú pháp, sử dụng đầu ra nhị phân ot-rcp.

nRF52840 Bắc Âu

Để thiết lập ví dụ về Bắc Âu nRF52840 để sử dụng như một thiết bị bắn súng, hãy nhân bản openthread/ot-nrf528xx và thiết lập môi trường tạo bản dựng:

git clone https://github.com/openthread/ot-nrf528xx --recursive
./script/bootstrap

Đặt tốc độ truyền là 460800. Tìm dòng #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 trong src/nrf52840/transport-config.h và thay thế dòng đó bằng #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800.

Tạo tệp nhị phân:

./script/build nrf52840 UART_trans

Chuyển đổi đầu ra nhị phân ot-rcp thành thập lục phân:

arm-none-eabi-objcopy -O ihex build/bin/ot-rcp ot-rcp.hex

Nhấp nháy tệp ot-rcp.hex vào bảng nRF52840 như đã nêu chi tiết trong Lưu nRF52840.

Tắt Thiết bị lưu trữ dung lượng lớn (MSD) trên nRF52840 để tránh các vấn đề hỏng hoặc rò rỉ dữ liệu khi sử dụng cổng gỡ lỗi:

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.

Thuộc tính mạng chuỗi

Trước khi tiếp tục, hãy lấy các thuộc tính sau cho Mạng luồng mà bạn muốn đánh giá. Bạn sẽ cần chúng để định cấu hình Wireshark và chạy trình báo cáo Pyspinel.

Tiền tố cục bộ lưới

Để nhận Tiền tố cục bộ lưới từ một thiết bị trong mạng Luồng mục tiêu:

  1. Sử dụng CLI OpenThread:

    dataset active
    Mesh Local Prefix: fd33:3333:3344:0/64
    

  2. Sử dụng wpanctl với NCP:

    wpanctl getprop IPv6:MeshLocalPrefix
    IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"
    

  3. Chọn Status (Trạng thái) bằng OTBR Web GUI. Tiền tố cục bộ lưới được liệt kê là IPv6:MeshLocalPrefix tương tự như wpanctl.

Kênh

Cách lấy Kênh từ một thiết bị trong mạng Chuỗi mục tiêu:

  1. Sử dụng CLI OpenThread:

    channel
    15
    

  2. Sử dụng wpanctl với NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. Chọn Status (Trạng thái) bằng OTBR Web GUI. Kênh được liệt kê là NCP:Channel, tương tự như wpanctl.

Khoá mạng

Khoá mạng được Wireshark sử dụng để giải mã các gói sau khi thu thập. Cách nhận Khoá mạng từ một thiết bị trong mạng Luồng mục tiêu:

  1. Sử dụng CLI OpenThread:

    networkkey
    33334444333344443333444433334444
    

  2. Sử dụng wpanctl với NCP:

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

Khoá mạng không có trong OTBR Web GUI.

Các tùy chọn của phiên bản Sniffer

Tùy chọn
-u or --uart
Giá trị mặc định
Không có – phải cung cấp nếu bạn đang sử dụng một thiết bị có kết nối nối tiếp chứ không phải là kết nối ổ cắm.
Mô tả
Cờ -u hoặc --uart nằm trước một đường dẫn thiết bị, chẳng hạn như /dev/ttyUSB0.
-c or --channel
Giá trị mặc định
11
Mô tả
Cờ -c hoặc --channel nằm trước kênh được định cấu hình trên Mạng luồng để khám phá các gói.
--no-reset
Giá trị mặc định
Cờ này ghi đè hành vi mặc định.
Mô tả
Cần có cờ --no-reset nếu thiết bị NCP của bạn kết nối với máy chủ có kết nối USB gốc.
--crc
Giá trị mặc định
Cờ này ghi đè hành vi mặc định.
Mô tả
Cờ --crc là cần thiết cho các nền tảng như bảng mạch TI và bán dẫn Bắc Âu. Cờ tính toán lại câu trả lời soạn trước để tránh cảnh báo "FCS không hợp lệ" (trình tự kiểm tra khung) trong Wireshark.
-b or --baudrate
Giá trị mặc định
115200
Mô tả
Cờ -b hoặc --baudrate được dùng để ghi đè tốc độ truyền mặc định. Đặt giá trị này thành cùng một tốc độ truyền được dùng với bản dựng NCP của bạn (bạn nên sử dụng 460800).
--rssi
Giá trị mặc định
Cờ này ghi đè hành vi mặc định.
Mô tả
Cờ --rssi được dùng để đảm bảo RSSI có trong kết quả pcap. Bạn phải sử dụng cờ này nếu bật tuỳ chọn TI CC24xx FCS format trong Wireshark.
--tap
Giá trị mặc định
Cờ này ghi đè hành vi mặc định.
Mô tả
Cờ --tap chỉ định DLT_IEEE802_15_4_TAP(283) cho định dạng khung, với tiêu đề giả có chứa TLV với siêu dữ liệu (chẳng hạn như FCS, RSSI, LQI, Channel). Nếu không được chỉ định, DLT_IEEE802_15_4_WITHFCS(195) theo mặc định sẽ được sử dụng với RSSI và LQI bổ sung theo sau khung PHY trực tiếp, như ở định dạng TI CC24xx FCS. Bạn phải sử dụng cờ này nếu tuỳ chọn ITU-T CRC-16 được bật trong Wireshark. Nếu tuỳ chọn đó chưa được bật trong Wireshark, thì không được sử dụng cờ này.

Chạy sniffer

Hãy nhớ sử dụng đường dẫn thiết bị cụ thể cho NCP và kênh cho Mạng luồng mà bạn đang cố gắng đánh giá.

Nếu làm theo hướng dẫn này, nRF52840 DK phải được gắn vào máy chủ bằng cổng gỡ lỗi, như mô tả trong phần Dùng flash nRF52840. Để chạy Psspinel sniffer, hãy sử dụng cờ -b để chỉ định tốc độ truyền (nếu tốc độ thay đổi so với mặc định) và bỏ qua cờ --no-reset.

Nếu Định cấu hình Wireshark để hiển thị RSSI, bạn cũng phải đưa cờ --rssi vào khi chạy công cụ báo cáo. Ví dụ: để đánh giá trên Kênh 15 bằng cách sử dụng một thiết bị được gắn tại /dev/ttyACM0 có RSSI đi kèm trong đầu ra Wireshark:

cd path-to-pyspinel
python sniffer.py -c 15 -u /dev/ttyACM0 --crc --rssi -b 460800 | wireshark -k -i -

Giờ đây, bạn sẽ có thể xem các gói và giao thức liên quan cho cấu hình này trong Wireshark:

Bắt cá mập

Tham khảo Tài liệu tham khảo về phiên bản Spinel để biết thêm thông tin về cách chạy trình nghiên cứu Psspinel sniffer.

Kết nối USB gốc

Việc sử dụng cổng USB nRF52840 DK yêu cầu tạo tệp nhị phân ot-rcp OpenThread bằng USB_trans:

./script/build nrf52840 USB_trans
Lưu DK nRF52840 DK, kết nối với máy chủ bằng cổng USB, sau đó sử dụng cờ --no-reset nhưng bỏ qua cờ -b khi chạy trình mô phỏng:

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

Tài nguyên

Để biết thêm các công cụ Bắc Âu khác, hãy tham khảo bài viết Công cụ bán dẫn Bắc Âu — Trình điều khiển chuỗi dựa trên nRF52840 với Wireshark.