Анализ пакетов с помощью Pyspinel

Посмотреть исходный код на GitHub

В этом руководстве рассказывается, как настроить Wireshark и запустить Pyspinel для прослушивания пакетов из сети Thread.

Чтобы использовать WIRESHARK extcap плагин для перехвата пакетов, см перехвата пакетов с помощью extcap .

Настроить среду сниффера

Прежде чем начать, выполните следующие действия:

Создайте сниффер

Создание и флэш - устройство NCP , чтобы служить в качестве сниффера, используя ot-rcp двоичный выход.

Скандинавский nRF52840

Чтобы настроить пример Nordic nRF52840 для использования в качестве перехватчика, клон 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.

Свойства потоковой сети

Прежде чем продолжить, получите следующие свойства для сети потоков, которую вы хотите прослушать. Они понадобятся вам для настройки Wireshark и запуска сниффера Pyspinel.

Локальный префикс сетки

Чтобы получить локальный префикс Mesh с устройства в сети целевого потока:

  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 Web GUI, выберите Состояние. Mesh Локальный префикс указан как IPv6: MeshLocalPrefix похожей на wpanctl .

Канал

Чтобы получить канал от устройства в целевой сети потоков:

  1. Использование OpenThread CLI:

    channel
    15
    

  2. Использование wpanctl с NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. Использование OTBR Web GUI, выберите Состояние. Канал перечислен как NCP: канал похож на wpanctl .

Сетевой ключ

Сетевой ключ потока используется Wireshark для расшифровки пакетов после захвата. Чтобы получить сетевой ключ от устройства в сети целевого потока:

  1. Использование OpenThread CLI:

    networkkey
    33334444333344443333444433334444
    

  2. Использование wpanctl с NCP:

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

Сетевой ключ потока недоступен в веб-интерфейсе OTBR.

Параметры сниффера

Параметры
-u or --uart
Значение по умолчанию
Нет - необходимо указать, если вы используете устройство с последовательным подключением, а не с подключением к сокету.
Описание
-u или --uart флаг следует пути устройства , такие как /dev/ttyUSB0 .
-c or --channel
Значение по умолчанию
11
Описание
-c или --channel флаг следует канал , настроенный на тему сети, на которой нюхать пакеты.
--no-reset
Значение по умолчанию
Этот флаг отменяет поведение по умолчанию.
Описание
--no-reset флага требуется , если устройство NCP подключаются к хосту с нативным подключением USB.
--crc
Значение по умолчанию
Этот флаг отменяет поведение по умолчанию.
Описание
--crc флаг необходим для таких платформ, как TI и Nordic Semiconductor плат темы. Флаг повторно вычисляет CRC, чтобы избежать предупреждения «Плохая FCS» (последовательность проверки кадра) в Wireshark.
-b or --baudrate
Значение по умолчанию
115200
Описание
-b или --baudrate флаг используется , чтобы переопределить скорость передачи данных по умолчанию. Установите это значение на ту же скорость передачи данных , используемую с билдом NCP (мы рекомендуем 460800).
--rssi
Значение по умолчанию
Этот флаг отменяет поведение по умолчанию.
Описание
--rssi флаг используется для обеспечения ПУПС входит в выходной PCAP. Вы должны использовать этот флаг , если формат TI CC24xx FCS опция включена в Wireshark.
--tap
Значение по умолчанию
Этот флаг отменяет поведение по умолчанию.
Описание
--tap флаг указывает DLT_IEEE802_15_4_TAP(283) для формата кадра, с псевдо-заголовка , содержащего TLVs с метаданными (такие как FCS, RSSI, LQI, канал). Если не указано, DLT_IEEE802_15_4_WITHFCS(195) будет использоваться по умолчанию с дополнительным ПУПС и LQI после PHY кадра непосредственно, как в формате TI CC24xx FCS. Вы должны использовать этот флаг , если ITU-T CRC-16 опция включена в Wireshark. Если этот параметр не включен в Wireshark, не используйте этот флаг.

Запустите сниффер

Обязательно используйте конкретный путь к устройству для вашего NCP и канал для сети потоков, которую вы пытаетесь прослушивать.

Если после выполнения этого руководства, то nRF52840 DK должен быть присоединен к хост - машине через порт отладки, как описано в прошить nRF52840 . Для запуска Pyspinel наркомана, используйте -b флаг для определения скорости передачи данных (если он был изменен с по умолчанию) и опустить --no-reset флага.

Если настройка Wireshark для отображения RSSI, вы должны также включать --rssi флаг при запуске инструмента снифера. Например, чтобы понюхать на канале 15 , используя устройство монтируется на /dev/ttyACM0 с ПУПС включены в выходные 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 наркомана.

Собственное USB-соединение

Использование USB - порт nRF52840 DK требует от OpenThread ot-rcp двоичная быть построен с USB_trans :

./script/build nrf52840 USB_trans
прошить nRF52840 DK, подключить его к хост - --no-reset машине через порт USB , а затем использовать --no-reset флага , но опускать -b флаг при запуске снифер:

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

Ресурсы

Дополнительные Скандинавских инструменты см Nordic Semiconductor - Thread Sniffer на основе nRF52840 с Wireshark .