Reniflage de paquets avec Pyspinel

<ph type="x-smartling-placeholder"></ph> Consulter le code source sur GitHub

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

Pour utiliser le plug-in extcap de Wireshark pour le reniflage de paquets, consultez l'article sur le reniflage de paquets à l'aide d'extcap.

Configurer l'environnement de détection

Avant de commencer, procédez comme suit:

Créer le détecteur

Créez et flashez un appareil NCP qui servira de détection, à l'aide de la sortie binaire ot-rcp.

Nordique nRF52840

Pour configurer l'exemple Nordic nRF52840 afin de l'utiliser comme outil de détection, 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 460 800. Trouver la ligne #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 dans src/nrf52840/transport-config.h, en le remplaçant 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 Flashez le nRF52840.

Désactivez le périphérique de stockage de masse (MSD) sur le nRF52840 pour éviter tout problème de données une corruption ou une interruption 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 pour renifler. Vous en aurez besoin pour configurer Wireshark et exécuter Pyspinel de détection.

Préfixe local du maillage

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

  1. À l’aide de 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. À l'aide de l'IUG Web OTBR, sélectionnez Status (État). Le préfixe local du réseau maillé s'affiche comme IPv6:MeshLocalPrefix, semblable à wpanctl.

Chaîne

Pour obtenir la chaîne à partir d'un appareil du réseau Thread cible:

  1. À l’aide de la CLI OpenThread:

    channel
    15
    

  2. Utiliser wpanctl avec un NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. À l'aide de l'IUG Web OTBR, sélectionnez Status (État). La chaîne est répertoriée en tant que NCP:Channel semblable à wpanctl.

Clé réseau

Wireshark utilise la clé réseau Thread pour déchiffrer les paquets après capture. Pour obtenir la clé réseau à partir d'un appareil sur le réseau Thread cible:

  1. À l’aide de 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 Web OTBR.

Options de détection

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

Exécuter le détecteur

Veillez à utiliser le chemin d'accès de l'appareil spécifique à votre NCP et le canal pour le Réseau Thread que vous tentez de renifler.

En suivant ce guide, vous devez connecter le nRF52840 DK à la machine hôte le port de débogage, comme décrit dans la section Flasher les 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é par défaut). et omettez l'option --no-reset.

Si vous configurez Wireshark pour afficher le RSSI, vous devez également inclure le --rssi. lorsque vous exécutez l'outil de détection. Par exemple, pour renifler sur la chaîne 15 à l'aide d'un appareil installé à /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 être en mesure de voir les paquets et les protocoles associés pour cette configuration dans Wireshark:

Capture Wireshark

Reportez-vous au outil de détection Spinel référence pour plus d'informations sur l'exécution du outil de détection Pyspinel.

Connexion USB native

L'utilisation du port USB DK nRF52840 nécessite le binaire OpenThread ot-rcp pour être compilé avec USB_trans:

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

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

Ressources

Pour découvrir d'autres outils nordiques, consultez Nordic Semiconductor — Thread Détecteur basé sur le nRF52840 de Wireshark.