Sniffing dei pacchetti con Pispinel

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 lo sniffing dei pacchetti, consulta la sezione Packet Sniffing usando extcap.

Configurare l'ambiente di sniffer

Prima di iniziare, completa i seguenti passaggi:

Crea lo sniffer

Crea e esegui il flashing di un dispositivo NCP da utilizzare come sniffer usando l'output binario ot-rcp.

nRF52840 nordico

Per impostare l'esempio nordico nRF52840 per l'uso come sniffer, clonere openthread/ot-nrf528xx e configurare l'ambiente di build:

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

Imposta la velocità in baud su 460800. Trova la linea #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 in src/nrf52840/transport-config.h e sostituiscilo con #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800.

Crea il programma 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 dettaglio in Esegui il flashing di nRF52840.

Disattiva Mass Storage Device (MSD) sull'nRF52840 per evitare problemi con i dati danni o interruzioni durante l'utilizzo della 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à di rete Thread

Prima di continuare, ottieni le seguenti proprietà per la rete Thread che vuoi da annusare. Ti serviranno per la configurazione di Wireshark e per l'esecuzione di Pyspinel sniffer.

Prefisso locale mesh

Per ottenere il prefisso locale mesh da un dispositivo nella rete Thread di destinazione:

  1. Utilizzo dell'interfaccia a riga di comando OpenThread:

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

  2. Utilizzo di wpanctl con un NCP:

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

  3. Utilizza la GUI web di OTBR, seleziona Stato. Il prefisso locale mesh è elencato come IPv6:MeshLocalPrefix simile a wpanctl.

Canale

Per recuperare il canale da un dispositivo nella rete Thread di destinazione:

  1. Utilizzo dell'interfaccia a riga di comando OpenThread:

    channel
    15
    

  2. Utilizzo di wpanctl con un NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. Utilizza la GUI web di OTBR, seleziona Stato. Il canale è indicato come NCP:canale simile a wpanctl.

Chiave di rete

La chiave di rete Thread viene utilizzata da Wireshark per decriptare i pacchetti dopo acquisizioni. Per ottenere la chiave di rete da un dispositivo nella rete Thread di destinazione:

  1. Utilizzo dell'interfaccia a riga di comando OpenThread:

    networkkey
    33334444333344443333444433334444
    

  2. Utilizzo di wpanctl con un NCP:

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

La chiave di rete Thread non è disponibile nella GUI web OTBR.

Opzioni sniffer

Opzioni
-u or --uart
Valore predefinito
Nessuno. Deve essere fornito se si utilizza un dispositivo con una connessione seriale e non una connessione socket.
Descrizione
Il flag -u o --uart seguito da un percorso dispositivo come /dev/ttyUSB0.
-c or --channel
Valore predefinito
11
Descrizione
Segui la bandiera -c o --channel dal canale configurato sulla tua rete Thread, su cui o annusare i pacchetti.
--no-reset
Valore predefinito
Questo flag sostituisce il comportamento predefinito.
Descrizione
Il flag --no-reset è necessario se il tuo NCP Il dispositivo sia connesso all'host tramite il cavo USB nativo connessione.
--crc
Valore predefinito
Questo flag sostituisce il comportamento predefinito.
Descrizione
Il flag --crc è necessario per piattaforme come schede TI e Nordic Semiconductor Thread. La bandiera ricalcola il CRC per evitare un "errore FCS" (controllo del frame sequenza) in Wireshark.
-b or --baudrate
Valore predefinito
115200
Descrizione
Viene utilizzato il flag -b o --baudrate per sostituire la velocità in baud predefinita. Imposta lo stesso valore velocità baud usata con il tuo NCP build (consigliamo 460800).
--rssi
Valore predefinito
Questo flag sostituisce il comportamento predefinito.
Descrizione
Il flag --rssi viene utilizzato per garantire che l'RSSI sia incluso nell'output pcap. Devi utilizzare questo flag se TI CC24xx FCS formattata automaticamente sia abilitata in Wireshark.
--tap
Valore predefinito
Questo flag sostituisce il comportamento predefinito.
Descrizione
Il flag --tap specifica DLT_IEEE802_15_4_TAP(283) per il formato del frame, con una pseudo-intestazione contenente TLV con metadati (come FCS, RSSI, LQI, canale). Se non specificato, DLT_IEEE802_15_4_WITHFCS(195) verrebbe utilizzato da per impostazione predefinita con RSSI e LQI aggiuntivi in base al PHY direttamente, come nel formato TI CC24xx FCS. Devi utilizzare questo flag se ITU-T CRC-16 sia abilitata in Wireshark. Se questa opzione non è abilitata in Wireshark, non usare questo flag.

Esegui lo sniffer

Assicurati di utilizzare il percorso dispositivo specifico per il NCP e il canale per il Stai tentando di sniffare la rete Thread.

Se segui questa guida, il nRF52840 DK deve essere collegato alla macchina host la porta di debug, come descritto in Eseguire il flashing della porta nRF52840. Per eseguire lo sniffer Pispinel, utilizzare il flag -b per specificare la velocità in baud (se è stata modificata da quella predefinita) e ometti il flag --no-reset.

Se configuri Wireshark per visualizzare il feed RSSI, devi includere anche --rssi quando esegui lo strumento di sniffer. Ad esempio, per sniffare sul Canale 15 utilizzando un dispositivo montato su /dev/ttyACM0 con RSSI incluso nell'output 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:

Cattura di Wireshark

Fai riferimento allo Sniffer Spinel di riferimento per ulteriori informazioni sull'esecuzione dello sniffer Pyspinel.

Connessione USB nativa

L'utilizzo della porta USB nRF52840 DK richiede il file binario OpenThread ot-rcp per essere creata con USB_trans:

./script/build nrf52840 USB_trans
Esegui il flashing dell'nRF52840 DK, collegalo al computer host tramite port, quindi usa 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 nordici, consulta la pagina relativa a Nordic Semiconductor - Thread Sniffer basato su nRF52840 con Wireshark.