Visualizza il codice sorgente su GitHub
Questa guida spiega come configurare Wireshark ed eseguire Pyspinel per sniffare i pacchetti da una rete Thread.
Per utilizzare il plug-in extcap di Wireshark per l'analisi dei pacchetti, consulta Analisi dei pacchetti con extcap.
Configura l'ambiente dello sniffer
Prima di iniziare, completa i seguenti passaggi:
- Esamina i requisiti per l'analisi dei pacchetti.
- Installa e configura Wireshark.
- Installa Pyspinel e le dipendenze senza extcap.
Crea lo sniffer
Compila e esegui il flashing di un dispositivo NCP da utilizzare come sniffer utilizzando l'output binario ot-rcp
.
Nordic nRF52840
Per configurare l'esempio Nordic nRF52840 per l'utilizzo come sniffer, clona
openthread/ot-nrf528xx
e configura l'ambiente di compilazione:
git clone https://github.com/openthread/ot-nrf528xx --recursive
./script/bootstrap
Imposta la velocità in baud su 460800. Trova la riga #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200
in src/nrf52840/transport-config.h
e sostituiscila con #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800
.
Crea il file binario:
./script/build nrf52840 UART_trans
Converti l'output binario ot-rcp
in esadecimale:
arm-none-eabi-objcopy -O ihex build/bin/ot-rcp ot-rcp.hex
Esegui il flashing del file ot-rcp.hex
sulla scheda nRF52840 come descritto in
Eseguire il flashing del nRF52840.
Disattiva il dispositivo di archiviazione di massa (MSD) su nRF52840 per evitare problemi di corruzione o perdita di dati quando utilizzi la porta di debug:
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.
Proprietà della rete Thread
Prima di continuare, ottieni le seguenti proprietà per la rete Thread che vuoi sniffare. Ti serviranno per la configurazione di Wireshark e per l'esecuzione dello sniffer Pyspinel.
Prefisso locale mesh
Per ottenere il prefisso locale mesh da un dispositivo nella rete Thread di destinazione:
Utilizzo dell'interfaccia a riga di comando OpenThread:
dataset active
Mesh Local Prefix: fd33:3333:3344:0/64Utilizzo di
wpanctl
con un NCP:wpanctl getprop IPv6:MeshLocalPrefix
IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"Utilizzando la GUI web OTBR, seleziona Stato. Il prefisso locale del mesh è indicato come IPv6:MeshLocalPrefix, in modo simile a
wpanctl
.
Canale
Per ottenere il canale da un dispositivo nella rete Thread di destinazione:
Utilizzo dell'interfaccia a riga di comando OpenThread:
channel
15Utilizzo di
wpanctl
con un NCP:wpanctl getprop NCP:Channel
NCP:Channel = 15Utilizzando la GUI web OTBR, seleziona Stato. Il canale è indicato come NCP:Channel, in modo simile a
wpanctl
.
Chiave di rete
La chiave di rete Thread viene utilizzata da Wireshark per decriptare i pacchetti dopo la cattura. Per ottenere la chiave di rete da un dispositivo nella rete Thread di destinazione:
Utilizzo dell'interfaccia a riga di comando OpenThread:
networkkey
33334444333344443333444433334444Utilizzo di
wpanctl
con un NCP:wpanctl getprop Network:Key
Network:Key = [33334444333344443333444433334444]
La chiave di rete Thread non è disponibile nella GUI web OTBR.
Opzioni di sniffer
Opzioni | |||||
---|---|---|---|---|---|
-u or --uart |
|
||||
-c or --channel |
|
||||
--no-reset |
|
||||
--crc |
|
||||
-b or --baudrate |
|
||||
--rssi |
|
||||
--tap |
|
Esegui lo sniffer
Assicurati di utilizzare il percorso del dispositivo specifico per il tuo NCP e il canale per la rete Thread che stai tentando di sniffare.
Se segui questa guida, il kit di sviluppo nRF52840 deve essere collegato alla macchina host tramite la porta di debug, come descritto in Eseguire il flashing del chip nRF52840. Per eseguire lo sniffer Pyspinel,
utilizza il flag -b
per specificare la velocità in baud (se è stata modificata rispetto al valore predefinito)
e ometti il flag --no-reset
.
Se configuri Wireshark per visualizzare l'RSSI, devi includere anche il flag --rssi
quando esegui lo strumento di sniffing. Ad esempio, per eseguire lo sniffing sul canale 15 utilizzando un
dispositivo montato a /dev/ttyACM0
con RSSI incluso nell'output di Wireshark:
cd path-to-pyspinel
python sniffer.py -c 15 -u /dev/ttyACM0 --crc --rssi -b 460800 | wireshark -k -i -
Ora dovresti essere in grado di visualizzare i pacchetti e i protocolli correlati per questa configurazione in Wireshark:
Per ulteriori informazioni sull'esecuzione dello sniffer Pyspinel, consulta la documentazione di riferimento dello sniffer Spinel.
Connessione USB nativa
L'utilizzo della porta USB del DK nRF52840 richiede che il codice binario OpenThread ot-rcp
sia compilato con USB_trans
:
./script/build nrf52840 USB_trans
Esegui il flashing del DK nRF52840, collegalo alla macchina host tramite la porta USB, quindi utilizza il flag --no-reset
, ma ometti il flag -b
quando esegui lo sniffer:
python sniffer.py -c 15 -u /dev/ttyACM0 --crc --no-reset --rssi | wireshark -k -i -
Risorse
Per altri strumenti Nordic, consulta Nordic Semiconductor - Thread Sniffer basato su nRF52840 con Wireshark.