Sniffing dei pacchetti con Pyspinel

Visualizza l'origine su GitHub

Questa guida illustra come configurare Wireshark ed eseguire Pyspinel per sniffare i pacchetti da una rete Thread.

Per utilizzare il plug-in extcap Wireshark per lo sniffing dei pacchetti, consulta Packet Sniffing using extcap.

Configurare l'ambiente Stackdriver

Prima di iniziare, completa i seguenti passaggi:

Crea lo shard

Crea e esegui il flashing di un dispositivo NCP per essere utilizzato come snapshot tramite l'output binario di ot-rcp.

Nordic nRF52840

Per configurare l'esempio Nordic nRF52840 da usare come slogan, clona openthread/ot-nrf528xx e configura l'ambiente di compilazione:

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

Imposta la velocità di trasmissione su 460.800. 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 programma binario:

./script/build nrf52840 UART_trans

Converti l'output binario di 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 alla scheda nRF52840 come descritto nella sezione Esegui il flashing della scheda nRF52840.

Disattiva Mass Storage Device (MSD) su nRF52840 per evitare problemi di danneggiamento o danneggiamento dei 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à rete Thread

Prima di continuare, cerca le proprietà seguenti per la rete Thread che vuoi sniffare. Ti serviranno per la configurazione di Wireshark e per eseguire lo snack Pyspinel.

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 di 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. Utilizzando la GUI web di OTBR, seleziona Stato. Il prefisso locale mesh è elencato come IPv6:MeshLocalPrefix simile a wpanctl.

Canale

Per ottenere il canale da un dispositivo nella rete Thread target:

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

    channel
    15
    

  2. Utilizzo di wpanctl con un NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

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

Chiave di rete

La chiave di rete Thread viene utilizzata da Wireshark per decriptare i pacchetti dopo l'acquisizione. Per recuperare la chiave di rete da un dispositivo nella rete Thread target:

  1. Utilizzo dell'interfaccia a riga di comando di 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 di OTBR.

Opzioni di snack

Opzioni
-u or --uart
Valore predefinito
Nessuno: deve essere fornito se utilizzi un dispositivo con una connessione seriale e non una connessione socket.
Description (Descrizione)
Il flag -u o --uart seguito da un percorso del dispositivo come /dev/ttyUSB0.
-c or --channel
Valore predefinito
11
Description (Descrizione)
Il flag -c o --channel seguito dal canale configurato sulla rete Thread, sul quale sniffa i pacchetti.
--no-reset
Valore predefinito
Questo flag sostituisce il comportamento predefinito.
Description (Descrizione)
Il flag --no-reset è necessario se il dispositivo NCP è connesso all'host con la connessione USB nativa.
--crc
Valore predefinito
Questo flag sostituisce il comportamento predefinito.
Description (Descrizione)
Il flag --crc è necessario per piattaforme come TI e Nordic Semiconductor Thread. Il flag ricalcola il CRC per evitare l'avviso "Bad FCS" (sequenza di controllo del frame) in Wireshark.
-b or --baudrate
Valore predefinito
115200
Description (Descrizione)
Il flag -b o --baudrate viene utilizzato per eseguire l'override della baud rate predefinita. Imposta questo valore sulla stessa velocità in baud utilizzata con la tua build NCP (consigliamo 460800).
--rssi
Valore predefinito
Questo flag sostituisce il comportamento predefinito.
Description (Descrizione)
Il flag --rssi viene utilizzato per garantire che RSSI sia incluso nell'output pcap. Devi utilizzare questo flag se l'opzione Formato TI CC24xx FCS è abilitata in Wireshark.
--tap
Valore predefinito
Questo flag sostituisce il comportamento predefinito.
Description (Descrizione)
Il flag --tap specifica DLT_IEEE802_15_4_TAP(283) per il formato frame, con una pseudo-intestazione contenente TLV con metadati (ad esempio FCS, RSSI, LQI, Canale). Se non specificato, DLT_IEEE802_15_4_WITHFCS(195) verrà utilizzato per impostazione predefinita con RSSI e LQI aggiuntivi seguendo direttamente il frame PHY, come in formato FCS TI CC24xx. Devi utilizzare questo flag se l'opzione ITU-T CRC-16 è abilitata in Wireshark. Se questa opzione non è abilitata in Wireshark, non utilizzare questo flag.

Esegui lo shard

Assicurati di utilizzare il percorso specifico del dispositivo per il tuo NCP e il canale per la rete Thread che stai cercando di sniffare.

Se segui questa guida, il nRF52840 DK deve essere collegato alla macchina host dalla porta di debug, come descritto in Esegui il flashing del nRF52840. Per eseguire lo snapshot Pyspinel, utilizza il flag -b per specificare la velocità in baud (se è stata modificata dall'impostazione predefinita) e omettere il flag --no-reset.

Se configuri Wireshark per visualizzare RSSI, devi includere anche il flag --rssi quando esegui lo strumento di shard. Ad esempio, per sniffare il canale 15 utilizzando un dispositivo montato su /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 relativi per questa configurazione in Wireshark:

Cattura con gli squali

Per ulteriori informazioni sull'esecuzione dello shard Pyspinel, fai riferimento al riferimento di riferimento per lo stack.

Connessione USB nativa

Per utilizzare la porta USB nRF52840 DK, è necessario creare il programma binario OpenThread ot-rcp con USB_trans:

./script/build nrf52840 USB_trans
Esegui il flashing della porta nRF52840 DK, connettila al computer host tramite la porta USB, quindi utilizza il flag --no-reset ma ometti il flag -b durante l'esecuzione dello snapshot:

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

Risorse

Per altri strumenti nordici, consulta l'articolo Nordic Semiconductor — Thread Sniffer basato su nRF52840 con Wireshark.