Перехват пакетов с помощью Pyspinel

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

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

Чтобы использовать плагин extcap Wireshark для анализа пакетов, обратитесь к разделу «Прослушивание пакетов с помощью 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 от устройства в целевой сети 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, чтобы избежать предупреждения «Плохая FCS» (последовательность проверки кадров) в Wireshark.
-b or --baudrate
Значение по умолчанию
115200
Описание
Флаг -b или --baudrate используется для переопределения скорости передачи данных по умолчанию. Установите для этого значения ту же скорость передачи данных, которая используется в вашей сборке NCP (мы рекомендуем 460800).
--rssi
Значение по умолчанию
Этот флаг переопределяет поведение по умолчанию.
Описание
Флаг --rssi используется для обеспечения включения RSSI в выходные данные pcap. Вы должны использовать этот флаг, если в Wireshark включена опция формата TI CC24xx FCS .
--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-порта nRF52840 DK требуется, чтобы двоичный файл OpenThread ot-rcp был собран с помощью USB_trans :

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

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

Ресурсы

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