Phát hiện gói tin bằng Pyspinel

Xem nguồn trên GitHub

Hướng dẫn này đề cập đến cách định cấu hình Wireshark và chạy Pyspinel để phân tích các gói tin từ mạng Thread.

Để sử dụng trình bổ trợ phần mở rộng Wireshark cho tính năng phân tích gói tin, hãy tham khảo phần Phân tích gói tin bằng định dạng extcap.

Thiết lập môi trường theo dõi

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

Tạo sniffer

Tạo và cài đặt ROM một thiết bị NCP để đóng vai trò là trình theo dõi bằng cách sử dụng đầu ra nhị phân ot-rcp.

Bắc Âu nRF52840

Để thiết lập ví dụ nRF52840 của Bắc Âu dùng làm thiết bị theo dõi, hãy sao chép openthread/ot-nrf528xx và thiết lập môi trường bản dựng:

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

Đặt tốc độ baud là 460800. Tìm đường thẳng #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 trong src/nrf52840/transport-config.h rồi thay thế 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 sang hệ thập lục phân:

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

Cài đặt ROM tệp ot-rcp.hex vào bảng nRF52840 như được nêu chi tiết bằng Cài đặt ROM nRF52840.

Tắt Thiết bị lưu trữ dung lượng lớn (MSD) trên nRF52840 để tránh các sự cố với dữ liệu bị hỏng hoặc bị giảm 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 Thread

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

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

Cách nhận Tiền tố cục bộ lưới từ một thiết bị trong mạng Thread mục tiêu:

  1. Sử dụng OpenThread CLI:

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

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

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

  3. Sử dụng OTBR Web GUI (Giao diện người dùng đồ hoạ web OTBR), chọn Trạng thái. Tiền tố cục bộ lưới được liệt kê dưới dạng IPv6:MeshLocalPrefix tương tự như wpanctl.

Kênh

Cách tải Kênh từ một thiết bị trong mạng Thread mục tiêu:

  1. Sử dụng OpenThread CLI:

    channel
    15
    

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

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. Sử dụng OTBR Web GUI (Giao diện người dùng đồ hoạ web OTBR), chọn Trạng thái. Kênh được liệt kê là NCP:Kênh tương tự như wpanctl.

Khoá mạng

Khóa mạng Thread được Wireshark sử dụng để giải mã gói sau khi chụp. Cách lấy Khoá mạng từ một thiết bị trong mạng Thread mục tiêu:

  1. Sử dụng OpenThread CLI:

    networkkey
    33334444333344443333444433334444
    

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

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

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

Lựa chọn cho tin nhắn nhanh

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

Chạy trình theo dõi

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

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

Nếu bạn Định cấu hình Wireshark để hiển thị RSSI, bạn cũng phải thêm --rssi gắn cờ khi bạn chạy công cụ theo dõi. Ví dụ: để theo dõi Kênh 15 bằng thiết bị được gắn tại /dev/ttyACM0 có RSSI trong dữ liệu đầu ra Wireshark:

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

Bây giờ, bạn có thể xem các gói dữ liệu và giao thức liên quan cho quy trình này trong Wireshark:

Bắt cá mập

Tham khảo Spinel sniffer tham khảo cho biết thêm thông tin về cách chạy Pyspinel sniffer.

Kết nối USB gốc

Khi sử dụng cổng USB DK nRF52840, cần có tệp nhị phân OpenThread ot-rcp để được tạo bằng USB_trans:

./script/build nrf52840 USB_trans
Cài đặt ROM nRF52840 DK, kết nối thiết bị này với máy chủ bằng USB cổng, sau đó dùng cờ --no-reset nhưng bỏ qua cờ -b khi chạy trình theo dõi:

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ụ khác của Bắc Âu, hãy tham khảo bài viết Nordic Semiconductor — Chủ đề Tín hiệu theo dõi dựa trên nRF52840 bằng Wireshark.