Анализ пакетов с помощью 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.

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

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

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

Чтобы получить Mesh Local Prefix с устройства в целевой сети Thread:

  1. Использование интерфейса командной строки OpenThread:

    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 .

Канал

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

  1. Использование интерфейса командной строки OpenThread:

    channel
    15
    

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

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. Используя веб-интерфейс OTBR, выберите « Статус ». Канал указан как NCP:Channel , аналогичный wpanctl .

Сетевой ключ

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

  1. Использование интерфейса командной строки OpenThread:

    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 Thread. Флаг пересчитывает CRC, чтобы избежать предупреждения «Bad FCS» (последовательность проверки кадра) в Wireshark.
-b or --baudrate
Значение по умолчанию
115200
Описание
Флаг -b или --baudrate используется для переопределения скорости передачи данных по умолчанию. Установите для этого значения ту же скорость передачи данных, которая используется в вашей сборке NCP (мы рекомендуем 460 800).
--rssi
Значение по умолчанию
Этот флаг переопределяет поведение по умолчанию.
Описание
Флаг --rssi используется для включения RSSI в вывод pcap. Вы должны использовать этот флаг, если опция формата TI 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. Вы должны использовать этот флаг, если в Wireshark включена опция ITU-T CRC-16 . Если этот параметр не включен в Wireshark, не используйте этот флаг.

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

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

Если следовать этому руководству, nRF52840 DK должен быть подключен к хост-компьютеру через порт отладки, как описано в разделе «Прошивка nRF52840» . Чтобы запустить сниффер Pyspinel, используйте флаг -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

Дополнительные сведения о запуске анализатора Pyspinel см. в справочнике по анализатору данных Spinel.

Родное USB-соединение

Для использования USB- порта

./script/build nrf52840 USB_trans
DK требуется, чтобы двоичный файл OpenThread ot-rcp был собран с --no-reset USB_trans : Флаг -b при запуске сниффера:

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

Ресурсы

Дополнительные инструменты Nordic см. в Nordic Semiconductor — Thread Sniffer на базе nRF52840 с Wireshark .