Dénicher des paquets avec Pyspinel

Afficher la source sur GitHub

Ce guide explique comment configurer Wireshark et exécuter Pyspinel pour renifler des paquets à partir d'un réseau Thread.

Si vous souhaitez utiliser le plug-in extcap Wireshark pour sniffer des paquets, consultez la page Sniffing de paquets à l'aide d'extcap.

Configurer l'environnement de détection

Avant de commencer, procédez comme suit:

Créer un outil de détection

Créez un flash NCP et faites-le clignoter en tant que outil de détection, à l'aide de la sortie binaire ot-rcp.

Nordique nRF52840

Pour configurer l'exemple nordique nRF52840 pour l'utiliser en tant que renifleur, clonez openthread/ot-nrf528xx et configurez l'environnement de compilation:

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

Définissez le débit en bauds sur 460800. Recherchez la ligne #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 dans src/nrf52840/transport-config.h, puis 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 indiqué dans la section Flash nRF52840.

Désactivez le périphérique 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 de threads

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 détecteur Pyspinel.

Préfixe local du réseau maillé

Pour obtenir le préfixe local du réseau maillé à partir d'un appareil du réseau Thread cible:

  1. Avec la CLI OpenThread :

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

  2. Utiliser wpanctl avec un NCP :

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

  3. Dans l'IUG Web OTBR, sélectionnez État. Le préfixe local du réseau maillé est répertorié sous la forme IPv6:MeshLocalPrefix comme dans le cas de wpanctl.

Canal

Pour obtenir la chaîne depuis un appareil dans le réseau Thread cible:

  1. Avec la CLI OpenThread :

    channel
    15
    

  2. Utiliser wpanctl avec un NCP :

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. Dans l'IUG Web OTBR, sélectionnez État. Le canal est répertorié sous le nom NCP:Channel semblable à wpanctl.

Clé réseau

La clé réseau Thread est utilisée par Wireshark pour déchiffrer des paquets après la capture. Pour obtenir la clé réseau à partir d'un appareil dans le réseau Thread cible:

  1. Avec la CLI OpenThread :

    networkkey
    33334444333344443333444433334444
    

  2. Utiliser wpanctl avec un NCP :

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

La clé réseau Thread n'est pas disponible dans l'IUG OTBR Web.

Options de détection

Options
-u or --uart
Valeur par défaut
Aucune : doit être fournie si vous utilisez un appareil avec une connexion série, et non une connexion de socket.
Description
L'option -u ou --uart suivie du chemin d'accès d'un appareil tel que /dev/ttyUSB0
-c or --channel
Valeur par défaut
11
Description
L'option -c ou --channel, suivie du canal configuré sur votre réseau Thread, sur lequel renifler des paquets.
--no-reset
Valeur par défaut
Cette option ignore le comportement par défaut.
Description
L'option --no-reset est nécessaire si votre appareil NCP est connecté à l'hôte avec la connexion USB native.
--crc
Valeur par défaut
Cette option ignore le comportement par défaut.
Description
L'option --crc est nécessaire pour les plates-formes telles que les cartes TI et Nordic Semiconductor Thread. L'option recalcule le CRC pour éviter un avertissement "Bad FCS" (séquence de vérification des images) dans Wireshark.
-b or --baudrate
Valeur par défaut
115200
Description
L'option -b ou --baudrate permet de remplacer le débit en baud par défaut. Définissez cette valeur sur le même débit en bauds que celui utilisé avec votre build PNC (nous vous recommandons d'utiliser la valeur 460800).
--rssi
Valeur par défaut
Cette option ignore le comportement par défaut.
Description
L'option --rssi permet de s'assurer que le RSSI est inclus dans le résultat pcap. Vous devez utiliser cette option si l'option Format FCS TI CC24xx est activée dans Wireshark.
--tap
Valeur par défaut
Cette option ignore le comportement par défaut.
Description
L'option --tap spécifie DLT_IEEE802_15_4_TAP(283) pour le format de trame, avec un pseudo-en-tête contenant des TLV avec des métadonnées (telles que FCS, RSSI, LQI ou Channel). Si aucune valeur n'est spécifiée, DLT_IEEE802_15_4_WITHFCS(195) est utilisé par défaut avec les valeurs RSSI et LQI supplémentaires suivant le frame PHY directement, comme au format FCS 24xx de TI. Vous devez utiliser cette option si l'option ITU-T CRC-16 est activée dans Wireshark. Si cette option n'est pas activée dans Wireshark, n'utilisez pas cette option.

Exécuter le sniffer

Assurez-vous d'utiliser le chemin d'accès à l'appareil spécifique pour votre NCP et le canal du réseau Thread que vous essayez de détecter.

Si vous suivez ce guide, le dKF52840 DK doit être associé à la machine hôte par le port de débogage, comme décrit dans la section Flash nrF52840. Pour exécuter le détecteur Pyspinel, utilisez l'option -b pour spécifier le débit en bauds (s'il a été modifié à partir de la valeur par défaut) et omettre l'option --no-reset.

Si vous configurez Wireshark pour afficher RSSI, vous devez également inclure l'option --rssi lorsque vous exécutez l'outil de détection. Par exemple, pour analyser sur le canal 15 un appareil monté à l'emplacement /dev/ttyACM0 avec RSSI inclus dans le résultat Wireshark:

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

Vous devez maintenant pouvoir afficher les paquets et les protocoles associés pour cette configuration dans Wireshark:

Capture Wireshark

Pour en savoir plus sur l'exécution du détecteur Pyspinel, reportez-vous à la documentation de référence sur le sniffer de Spinel.

Connexion USB native

L'utilisation du port USB DRF52840 DK nécessite la création du binaire OpenThread ot-rcp avec USB_trans :

./script/build nrf52840 USB_trans
Flash le nRF52840 DK, connectez-le à la machine hôte par le port USB, puis utilisez l'indicateur --no-reset mais omettez l'indicateur -b lors de l'exécution de la détection:

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

Resources

Pour découvrir d'autres outils nordiques, reportez-vous au document Nordic Semiconductor – Thread Sniffer basé sur nRF52840 avec Wireshark.