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

Detección de paquetes con Pyspinel

Los Pyspinel Conexiones herramienta rastreadores a un hilo NCP o dispositivo de RCP y la convierte en un analizador de paquetes promiscua, generando una corriente pcap (captura de paquetes) que se guarden o hilo directamente en Wireshark.

Wireshark es una herramienta de código abierto que puede decodificar protocolos de red en la pila de subprocesos, como IEEE 802.15.4, 6LoWPAN, IPv6, MLE (establecimiento de enlace de malla), UDP y CoAP.

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

Para utilizar el plugin del Wireshark extcap para la detección de paquetes, consulte la detección de paquetes utilizando extcap .

Requisitos

Hardware:

  • Una máquina host para servir como NCP y ejecutar Pyspinel y Wireshark:
    • macOS: OS X 10.6 de 64 bits o posterior
    • Ubuntu
  • 1 dispositivo OpenThread mostró con un ot-ncp-ftd o ot-rcp de construcción.

Software:

  • Python 3 para ejecutar Pyspinel
  • Wireshark 2.4.1 o posterior para la compatibilidad con el protocolo de rosca

Instalación

Configurar el entorno del rastreador

Clonar e instalar Pyspinel y dependencias:

  1. Instalar las dependencias:
    sudo apt install python3-pip
    pip3 install --user pyserial ipaddress
  2. Clonar el repositorio Pyspinel:
    git clone https://github.com/openthread/pyspinel
  3. Instalar Pyspinel:
    cd pyspinel
    python3 setup.py install

Alternativamente, configurar el entorno mediante la instalación de la pyspinel paquete. Tenga en cuenta que este paquete utiliza la versión v1.0.0a3 Pyspinel y no la última Pyspinel principal.

pip3 install --user pyspinel

Instalar Wireshark

Linux

Abra una terminal y ejecute los siguientes comandos para descargar e instalar Wireshark:

sudo add-apt-repository ppa:wireshark-dev/stable
sudo apt-get update
sudo apt-get install wireshark

Recomendamos ejecutar Wireshark como usuario no root. Para hacerlo, vuelva a configurar el paquete:

sudo dpkg-reconfigure wireshark-common

Cuando se obtiene el diálogo preguntando "Si la no-super-usuarios sean capaces de capturar paquetes?", Seleccione Sí, a continuación, añadir los wireshark permisos de usuario y archivo de actualización:

sudo adduser $USER wireshark
sudo chmod +x /usr/bin/dumpcap

Mac OS

Descargar e instalar Wireshark para MacOS.

Construye el rastreador

Construir y parpadea un dispositivo de NCP para servir como el sniffer, utilizando el ot-rcp salida binaria.

Nórdico nRF52840

Para configurar el ejemplo de Nordic nRF52840 para su uso como rastreador:

  1. Clon OpenThread / ot-nrf528xx y configurar el entorno de construcción:
    git clone https://github.com/openthread/ot-nrf528xx --recursive
    ./script/bootstrap
    
  2. Velocidad de transmisión ajustada como 460800. Encuentra la línea #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 en src/nrf52840/transport-config.h , y reemplazarlo con #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800 .
  3. Construir el binario:
    ./script/build nrf52840 UART_trans
    
  4. Convertir el ot-rcp salida binaria a hexadecimal:
    arm-none-eabi-objcopy -O ihex build/bin/ot-rcp ot-rcp.hex
    
  5. El flash de la ot-rcp.hex archivo a la tarjeta nRF52840 como se detalla en flash del nRF52840 .
  6. Dispositivo de almacenamiento masivo Desactivar (MSD) en el nRF52840 para evitar problemas con la corrupción de datos o desciende cuando se utiliza 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 ejecutar el rastreador de Pyspinel.

Prefijo local de malla

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

  1. Utilizando el OpenThread CLI:
    dataset active
    Mesh Local Prefix: fd33:3333:3344:0/64
    
  2. Usando wpanctl con un PNC:
    wpanctl getprop IPv6:MeshLocalPrefix
    IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"
    
  3. Mediante la GUI Web OTBR, seleccione Estado. La malla de prefijo local aparece como IPv6: MeshLocalPrefix similar a wpanctl .

Canal

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

  1. Utilizando el OpenThread CLI:
    channel
    15
    
  2. Usando wpanctl con un PNC:
    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    
  3. Mediante la GUI Web OTBR, seleccione Estado. El canal aparece como PNC: Canal similar a wpanctl .

Clave de red

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

  1. Utilizando el OpenThread CLI:
    networkkey
    33334444333344443333444433334444
    
  2. Usando wpanctl con un PNC:
    wpanctl getprop Network:Key
    Network:Key = [33334444333344443333444433334444]
    

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

Configuración de Wireshark: protocolos

Wireshark debe configurarse para mostrar correctamente los paquetes de subprocesos.

Seleccione Preferencias ... en Wireshark y expanda la sección Protocolos.

6LoWPAN

Seleccionar 6LoWPAN de la lista de protocolos y comprobar o cambiar la configuración siguientes:

  1. Deseleccionar Derivar ID de acuerdo con RFC 4944.
  2. Actualización de Contexto 0 con la malla de prefijo local de la red subproceso de destino.
OT Sniffer Wireshark 6LoWPAN

Wireshark utiliza configuraciones de contexto para analizar la dirección IPv6 comprimida y mostrar correctamente las direcciones IPv6 de origen y destino.

Para mostrar las direcciones de otros prefijos en malla configurados en la puerta de enlace, actualice otras ID de contexto con esos prefijos.

Para obtener el ID de contexto para un prefijo en malla específico, vea el TLV de datos de red de subprocesos en cualquier mensaje de respuesta de datos MLE. Por ejemplo:

Context 1: fd00:7d03:7d03:7d03::/64

CoAP

Seleccionar COAP de la lista de protocolos y establecer coap puerto UDP a 61631. Esto asegura mensajes TMF (como la dirección de petición) se muestran.

IEEE 802.15.4

Seleccionar IEEE 802.15.4 de la lista de protocolos y comprobar o cambiar los siguientes ajustes:

  1. Establecer 802.15.4 Ethertype (en hexadecimal) para "0x809a".
  2. Ajuste el Paquete de seguridad a "AES-128 de cifrado, protección de integridad de 32 bits".
  3. Haga clic en el botón Editar ... al lado de descifrado de llaves, que es donde puede añadir la red de rosca Llave Maestra para el descifrado de paquetes.
    1. Haga clic en + para agregar una clave de descifrado.
    2. Entrar en la red de rosca Llave Maestra en la columna de la clave de descifrado.
    3. Anote "1" como el índice de la clave de descifrado.
    4. Elija un hash de hilo desde el cuadro de lista de columna clave hash.
    5. OT Sniffer Wireshark IEEE 802.15.4
    6. Haga clic en Aceptar para guardar la clave de descifrado.

Hilo

Seleccionar Tema de la lista de protocolos y comprobar o cambiar la configuración siguientes:

  1. Enter "00000000" para el contador de secuencia de rosca.
  2. Desactive la opción Usar PAN ID como primera dos octetos de llave maestra.
  3. Comprobar automáticamente adquirir Tema contador de secuencia.

Haga clic en el botón Aceptar para guardar los cambios en el protocolo.

Es posible que parte del tráfico de subprocesos se analice como el protocolo ZigBee. Para mostrar correctamente estos dos protocolos, edite los protocolos habilitados en Wireshark:

  1. En Wireshark, ir a Analizar> Protocolos habilitados.
  2. Desmarque los siguientes protocolos:
    1. LwMesh
    2. ZigBee
    3. ZigBee Green Power

Configuración de Wireshark - RSSI

Para mostrar RSSI en Wireshark:

  1. Ir a Preferencias> Protocolos> IEEE 802.15.4.
  2. Establecer el formato de FCS:
    • Si IEEE 802.15.4 TAP discapacitados: TI CC24xx metadatos.
    • Si IEEE 802.15.4 TAP habilitado: UIT-T CRC-16. Ver el --tap bandera para obtener más información.
  3. Haga clic en Aceptar para guardar y volver al menú de Preferencias.
  4. En Preferencias, seleccione Apariencia> Columnas.
  5. Agregar una nueva entrada:
    • Título: RSSI
    • Tipo: personalizado
    • Campos: wpan.rssi
OT Sniffer Wireshark RSSI

Opciones de sniffer

Opciones
-u or --uart
Valor por defecto
Ninguno: debe proporcionarse si está utilizando un dispositivo con una conexión en serie y no una conexión de enchufe.
Descripción
El -u o --uart bandera seguidos por una ruta de dispositivo tal como /dev/ttyUSB0 .
-c or --channel
Valor por defecto
11
Descripción
El -c o --channel bandera seguida por el canal configurado en su red de rosca, sobre la cual los paquetes sniff.
--no-reset
Valor por defecto
Esta bandera anula el comportamiento predeterminado.
Descripción
El --no-reset es necesaria si el dispositivo indicador PNC está conectado al host con la conexión USB nativo.
--crc
Valor por defecto
Esta bandera anula el comportamiento predeterminado.
Descripción
El --crc es necesaria bandera para plataformas tales como Ti y Nordic Semiconductor tableros hilo. La bandera recalcula el CRC para evitar una advertencia de "FCS defectuoso" (secuencia de verificación de tramas) en Wireshark.
-b or --baudrate
Valor por defecto
115200
Descripción
El -b o --baudrate bandera se utiliza para anular la velocidad en baudios predeterminada. Establecer este valor a la misma velocidad de transmisión utilizada con su acumulación PNC (recomendamos 460800).
--rssi
Valor por defecto
Esta bandera anula el comportamiento predeterminado.
Descripción
El --rssi indicador se utiliza para asegurar el RSSI se incluye en la salida PCAP. Debe utilizar este indicador si el formato de TI CC24xx FCS opción está habilitada en Wireshark.
--tap
Valor por defecto
Esta bandera anula el comportamiento predeterminado.
Descripción
El --tap bandera especifica DLT_IEEE802_15_4_TAP(283) para el formato de trama, con una pseudo-cabecera que contiene TLV con metadatos (tales como FCS, RSSI, ICT, Channel). Si no se especifica, DLT_IEEE802_15_4_WITHFCS(195) sería utilizado por defecto con el RSSI adicional y ICT después de la trama PHY directamente, como en formato TI CC24xx FCS. Debe utilizar este indicador si el UIT-T CRC-16 está activada la opción de Wireshark. Si esa opción no está habilitada en Wireshark, no use esta bandera.

Ejecuta el rastreador

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

Si después de esta guía, el nRF52840 DK debe adjuntar el ordenador central por el puerto de depuración, como se describe en flash del nRF52840 . Para ejecutar el Pyspinel sniffer, utilice el -b indicador para especificar la velocidad de transmisión (si fue cambiado del defecto) y omitir el --no-reset bandera.

Por ejemplo, para sniff en el canal 15 mediante un dispositivo montado en /dev/ttyACM0 con RSSI incluye en la salida 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

Ver la referencia Espinela sniffer para obtener más información sobre cómo ejecutar el Pyspinel sniffer.

Conexión USB nativa

Usando el puerto USB nRF52840 DK requiere la OpenThread ot-rcp binaria que se construirá con USB_trans :

./script/build nrf52840 USB_trans

El flash de la nRF52840 DK, conectarlo al ordenador central mediante el puerto USB , a continuación, utilizar la --no-reset bandera pero omitir el -b indicador cuando se ejecuta el sniffer:

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

Recursos

Para obtener más información sobre cómo utilizar Pyspinel y Wireshark, consulte lo siguiente: