Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Rastreo de paquetes con Pyspinel

Ver fuente en GitHub

Esta guía cubre cómo configurar Wireshark y ejecutar Pyspinel para rastrear paquetes de una red Thread.

Para usar el complemento extcap de Wireshark para el rastreo de paquetes, consulte Rastreo de paquetes usando extcap .

Configurar el entorno del rastreador

Antes de comenzar, complete los siguientes pasos:

Construye el rastreador

Cree y actualice un dispositivo NCP para que sirva como sniffer, utilizando la salida binaria ot-rcp .

Nórdico nRF52840

Para configurar el ejemplo de Nordic nRF52840 para usarlo como rastreador, clone openthread/ot-nrf528xx y configure el entorno de compilación:

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

Establezca la velocidad en baudios en 460800. Busque la línea #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 en src/nrf52840/transport-config.h y reemplácela con #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800 .

Construye el binario:

./script/build nrf52840 UART_trans

Convierta la salida binaria ot-rcp a hexadecimal:

arm-none-eabi-objcopy -O ihex build/bin/ot-rcp ot-rcp.hex

Flashee el archivo ot-rcp.hex en la placa nRF52840 como se detalla en Flash the nRF52840 .

Deshabilite el dispositivo de almacenamiento masivo (MSD) en el nRF52840 para evitar problemas con la corrupción de datos o caídas al usar el puerto de depuración:

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.

Propiedades de la red de subprocesos

Antes de continuar, obtenga las siguientes propiedades para la red Thread que desea rastrear. Los necesitará para la configuración de Wireshark y para ejecutar el sniffer de Pyspinel.

Prefijo local de malla

Para obtener el prefijo local de malla de un dispositivo en la red de subprocesos de destino:

  1. Uso de la CLI de OpenThread:

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

  2. Usando wpanctl con un NCP:

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

  3. Utilizando la GUI web de OTBR, seleccione Estado . El prefijo local de malla aparece como IPv6:MeshLocalPrefix similar a wpanctl .

Canal

Para obtener el canal de un dispositivo en la red de subprocesos de destino:

  1. Uso de la CLI de OpenThread:

    channel
    15
    

  2. Usando wpanctl con un NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. Utilizando la GUI web de OTBR, seleccione Estado . El canal aparece como NCP:Channel similar a wpanctl .

Clave de red

Wireshark utiliza la clave de red Thread para descifrar los paquetes después de la captura. Para obtener la clave de red de un dispositivo en la red de subprocesos de destino:

  1. Uso de la CLI de OpenThread:

    networkkey
    33334444333344443333444433334444
    

  2. Usando wpanctl con un NCP:

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

La clave de red de subprocesos no está disponible en la GUI web de OTBR.

Opciones de rastreador

Opciones
-u or --uart
Valor por defecto
Ninguno: se debe proporcionar si está utilizando un dispositivo con una conexión en serie y no una conexión de enchufe.
Descripción
El indicador -u o --uart seguido de una ruta de dispositivo como /dev/ttyUSB0 .
-c or --channel
Valor por defecto
11
Descripción
El indicador -c o --channel seguido del canal configurado en su Thread Network, sobre el cual rastrear paquetes.
--no-reset
Valor por defecto
Esta bandera anula el comportamiento predeterminado.
Descripción
El indicador --no-reset es necesario si su dispositivo NCP está conectado al host con la conexión USB nativa.
--crc
Valor por defecto
Esta bandera anula el comportamiento predeterminado.
Descripción
El indicador --crc es necesario para plataformas como TI y placas de subprocesos de Nordic Semiconductor. El indicador vuelve a calcular el CRC para evitar una advertencia de 'FCS incorrecto' (secuencia de verificación de marco) en Wireshark.
-b or --baudrate
Valor por defecto
115200
Descripción
El indicador -b o --baudrate se usa para anular la velocidad en baudios predeterminada. Establezca este valor en la misma velocidad en baudios utilizada con su compilación NCP (recomendamos 460800).
--rssi
Valor por defecto
Esta bandera anula el comportamiento predeterminado.
Descripción
El indicador --rssi se usa para garantizar que el RSSI se incluya en la salida de pcap. Debe usar este indicador si la opción de formato TI CC24xx FCS está habilitada en Wireshark.
--tap
Valor por defecto
Esta bandera anula el comportamiento predeterminado.
Descripción
El indicador --tap especifica DLT_IEEE802_15_4_TAP(283) para el formato de trama, con un pseudoencabezado que contiene TLV con metadatos (como FCS, RSSI, LQI, Channel). Si no se especifica, DLT_IEEE802_15_4_WITHFCS(195) se usaría de forma predeterminada con el RSSI y el LQI adicionales después del marco PHY directamente, como en el formato TI CC24xx FCS. Debe usar este indicador si la opción ITU-T CRC-16 está habilitada en Wireshark. Si esa opción no está habilitada en Wireshark, no use este indicador.

Ejecutar el rastreador

Asegúrese de usar la ruta de dispositivo específica para su NCP y el canal para la red Thread que está intentando rastrear.

Si sigue esta guía, el nRF52840 DK debe conectarse a la máquina host mediante el puerto de depuración, como se describe en Flashear el nRF52840 . Para ejecutar el sniffer de Pyspinel, use el indicador -b para especificar la velocidad en baudios (si se cambió el valor predeterminado) y omita el indicador --no-reset .

Si configura Wireshark para mostrar RSSI, también debe incluir el indicador --rssi cuando ejecuta la herramienta de rastreo. Por ejemplo, para olfatear el Canal 15 usando un dispositivo montado en /dev/ttyACM0 con RSSI incluido en la salida de Wireshark:

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

Ahora debería poder ver los paquetes y los protocolos relacionados para esta configuración en Wireshark:

Captura de Wireshark

Consulte la referencia del analizador Spinel para obtener más información sobre cómo ejecutar el analizador Pyspinel.

Conexión USB nativa

El uso del puerto USB nRF52840 DK requiere que el binario OpenThread ot-rcp se construya con USB_trans :

./script/build nrf52840 USB_trans
Flashee el nRF52840 DK, conéctelo a la máquina host mediante el puerto USB , luego use el indicador --no-reset pero omita el -b indicador al ejecutar el sniffer:

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

Recursos

Para obtener herramientas nórdicas adicionales, consulte Nordic Semiconductor — Thread Sniffer basado en nRF52840 con Wireshark .