Ce guide explique comment configurer Wireshark et exécuter Pyspinel pour analyser les paquets d'un réseau Thread.
Pour utiliser le plug-in extcap de Wireshark pour la détection des paquets, consultez Détection des paquets à l'aide d'extcap.
Configurer l'environnement du sniffer
Avant de commencer, procédez comme suit:
- Consultez les Conditions requises pour le sniffing de paquets.
- Installez et configurez Wireshark.
- Installez Pyspinel et les dépendances sans extcap.
Créer le sniffer
Créez et flashez un appareil NCP pour qu'il serve de sniffer, à l'aide de la sortie binaire ot-rcp
.
Nordic nRF52840
Pour configurer l'exemple Nordic nRF52840 pour l'utiliser comme sniffer, clonez openthread/ot-nrf528xx
et configurez l'environnement de compilation:
git clone https://github.com/openthread/ot-nrf528xx --recursive
./script/bootstrap
Définissez la vitesse de transmission sur 460 800. Recherchez la ligne #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200
dans src/nrf52840/transport-config.h
et remplacez-la par #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800
.
Créez le binaire:
./script/build nrf52840 UART_trans
Convertissez la sortie binaire ot-rcp
au format hexadécimal:
arm-none-eabi-objcopy -O ihex build/bin/ot-rcp ot-rcp.hex
Flashez le fichier ot-rcp.hex
sur la carte nRF52840, comme décrit dans la section Flasher le nRF52840.
Désactivez le dispositif de stockage de masse (MSD) sur le nRF52840 pour éviter les problèmes de corruption ou de perte de données lors de l'utilisation du port de débogage:
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.
Propriétés du réseau Thread
Avant de continuer, obtenez les propriétés suivantes pour le réseau Thread que vous souhaitez renifler. Vous en aurez besoin pour la configuration de Wireshark et l'exécution du sniffer Pyspinel.
Préfixe local du réseau maillé
Pour obtenir le préfixe local de maillage à partir d'un appareil du réseau Thread cible:
À l'aide de la CLI OpenThread :
dataset active
Mesh Local Prefix: fd33:3333:3344:0/64Utiliser
wpanctl
avec un NCP :wpanctl getprop IPv6:MeshLocalPrefix
IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"Dans l'IUG Web de l'OTBR, sélectionnez État. Le préfixe local du réseau maillé est listé sous la forme IPv6:MeshLocalPrefix, semblable à
wpanctl
.
Chaîne
Pour obtenir le canal à partir d'un appareil du réseau Thread cible:
À l'aide de la CLI OpenThread :
channel
15Utiliser
wpanctl
avec un NCP :wpanctl getprop NCP:Channel
NCP:Channel = 15Dans l'IUG Web de l'OTBR, sélectionnez État. La chaîne est listée comme NCP:Channel, comme
wpanctl
.
Clé réseau
La clé réseau Thread est utilisée par Wireshark pour déchiffrer les paquets après la capture. Pour obtenir la clé de réseau à partir d'un appareil du réseau Thread cible:
À l'aide de la CLI OpenThread :
networkkey
33334444333344443333444433334444Utiliser
wpanctl
avec un NCP :wpanctl getprop Network:Key
Network:Key = [33334444333344443333444433334444]
La clé de réseau Thread n'est pas disponible dans l'IUG Web de l'OTBR.
Options du sniffeur
Options | |||||
---|---|---|---|---|---|
-u or --uart |
|
||||
-c or --channel |
|
||||
--no-reset |
|
||||
--crc |
|
||||
-b or --baudrate |
|
||||
--rssi |
|
||||
--tap |
|
Exécuter le sniffer
Veillez à utiliser le chemin d'accès spécifique à votre NCP et le canal du réseau Thread que vous essayez d'analyser.
Si vous suivez ce guide, le DK nRF52840 doit être connecté à la machine hôte via le port de débogage, comme décrit dans la section Flasher le nRF52840. Pour exécuter le sniffer Pyspinel, utilisez l'option -b
pour spécifier le débit en bauds (s'il a été modifié par rapport à la valeur par défaut) et omettez l'option --no-reset
.
Si vous configurez Wireshark pour afficher le RSSI, vous devez également inclure l'indicateur --rssi
lorsque vous exécutez l'outil d'analyseur de paquets. Par exemple, pour renifler sur le canal 15 à l'aide d'un appareil monté sur /dev/ttyACM0
avec RSSI inclus dans la sortie Wireshark:
cd path-to-pyspinel
python sniffer.py -c 15 -u /dev/ttyACM0 --crc --rssi -b 460800 | wireshark -k -i -
Vous devriez maintenant pouvoir afficher les paquets et les protocoles associés à cette configuration dans Wireshark:
Pour en savoir plus sur l'exécution du sniffeur Pyspinel, consultez la documentation de référence du sniffeur Spinel.
Connexion USB native
L'utilisation du port USB du nRF52840 DK nécessite la compilation du binaire ot-rcp
OpenThread avec USB_trans
:
./script/build nrf52840 USB_trans
Flashez le nRF52840 DK, connectez-le à la machine hôte via le port USB, puis utilisez l'indicateur --no-reset
, mais omettez l'indicateur -b
lorsque vous exécutez le sniffer:
python sniffer.py -c 15 -u /dev/ttyACM0 --crc --no-reset --rssi | wireshark -k -i -
Ressources
Pour en savoir plus sur les outils Nordic, consultez Nordic Semiconductor : analyseur de protocole Thread basé sur nRF52840 avec Wireshark.