Detecção de pacotes com Pyspinel

Veja o código-fonte no GitHub

Este guia aborda como configurar o Wireshark e como executar o Pyspinel para detectar pacotes em uma rede Thread.

Para usar o plug-in extcap do Wireshark para detecção de pacotes, consulte Pacote de detecção usando extcap.

Configurar o ambiente WebRTC

Antes de começar, siga estas etapas:

Criar o WebRTC

Crie e atualize um dispositivo NCP para servir como o reconhecedor usando a saída binária ot-rcp.

Nórdico nRF52840

Para configurar o exemplo nordic nRF52840 a ser usado como um WebRTC, clone openthread/ot-nrf528xx e configure o ambiente de build:

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

Defina a taxa baud como 460800. Encontre a linha #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 em src/nrf52840/transport-config.h e substitua por #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800.

Crie o binário:

./script/build nrf52840 UART_trans

Converta a saída binária ot-rcp em hexadecimal:

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

Atualize o arquivo ot-rcp.hex para a placa nRF52840, conforme detalhado em Atualizar o nRF52840.

Desative o dispositivo de armazenamento em massa (MSD, na sigla em inglês) em nRF52840 para evitar problemas de corrupção de dados ou quedas ao usar a porta de depuração:

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.

Propriedades da rede da linha de execução

Antes de continuar, verifique as propriedades a seguir para a rede Thread que você quer detectar. Você precisará deles para a configuração do Wireshark e para a execução do sniiffer do Pyspinel.

Prefixo local da malha

Para ver o prefixo local da malha em um dispositivo na rede Thread de destino:

  1. Usando a CLI do OpenThread:

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

  2. Como usar wpanctl com um NCP:

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

  3. Usando a GUI da Web OTBR, selecione Status. O prefixo local da malha é listado como IPv6:MeshLocalPrefix semelhante a wpanctl.

Canal

Para acessar o canal de um dispositivo na rede Thread de destino:

  1. Usando a CLI do OpenThread:

    channel
    15
    

  2. Como usar wpanctl com um NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. Usando a GUI da Web OTBR, selecione Status. O canal está listado como NCP:Channel de forma semelhante a wpanctl.

Chave de rede

A chave de rede do Thread é usada pelo Wireshark para descriptografar pacotes após a captura. Para acessar a chave de rede de um dispositivo na rede Thread de destino:

  1. Usando a CLI do OpenThread:

    networkkey
    33334444333344443333444433334444
    

  2. Como usar wpanctl com um NCP:

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

A chave de rede de linhas de execução não está disponível na GUI da Web do OTBR.

Opções do sniffer

Opções
-u or --uart
Valor padrão
Nenhum: precisa ser fornecido se você estiver usando um dispositivo com uma conexão serial, e não com uma conexão de soquete.
Descrição
A sinalização -u ou --uart seguida por um caminho de dispositivo, como /dev/ttyUSB0.
-c or --channel
Valor padrão
11
Descrição
A sinalização -c ou --channel seguida pelo canal configurado na rede de linhas de execução, em que é feita a detecção de pacotes.
--no-reset
Valor padrão
Essa sinalização substitui o comportamento padrão.
Descrição
A sinalização --no-reset será necessária se o dispositivo NCP estiver conectado ao host com uma conexão USB nativa.
--crc
Valor padrão
Essa sinalização substitui o comportamento padrão.
Descrição
A sinalização --crc é necessária para plataformas como placas de linha de execução semicondutoras e de TI. A sinalização recalcula o CRC para evitar um aviso "Ruim FCS" (sequência de verificação de frames) no Wireshark.
-b or --baudrate
Valor padrão
115200
Descrição
A sinalização -b ou --baudrate é usada para substituir a taxa baud padrão. Defina esse valor como a mesma taxa de baud usada com o build NCP (recomendamos 460800).
--rssi
Valor padrão
Essa sinalização substitui o comportamento padrão.
Descrição
A sinalização --rssi é usada para garantir que o RSSI seja incluído na saída do pcap. Use essa sinalização se a opção formato TI CC24xx FCS estiver ativada no Wireshark.
--tap
Valor padrão
Essa sinalização substitui o comportamento padrão.
Descrição
A sinalização --tap especifica DLT_IEEE802_15_4_TAP(283) para o formato do frame, com um pseudocabeçalho contendo TLVs com metadados (como FCS, RSSI, LQI, Channel). Se não for especificado, DLT_IEEE802_15_4_WITHFCS(195) será usado por padrão com RSSI e LQI adicionais após o frame PHY diretamente, como no formato FCS TI CC24xx. Use essa sinalização se a opção ITU-T CRC-16 estiver ativada no Wireshark. Se essa opção não estiver ativada no Wireshark, não use essa sinalização.

Executar o

Use o caminho do dispositivo específico para o NCP e o canal para a rede Thread que você está tentando detectar.

Se seguir este guia, a DK nRF52840 será anexada à máquina host pela porta de depuração, conforme descrito em Atualizar o nRF52840. Para executar o detector do Pyspinel, use a sinalização -b para especificar a taxa baud (se ela tiver sido mudada do padrão) e omitir a sinalização --no-reset.

Se você configurar o Wireshark para exibir RSSI, também precisará incluir a sinalização --rssi ao executar a ferramenta MapReduce. Por exemplo, para detectar o canal 15 usando um dispositivo montado em /dev/ttyACM0 com RSSI incluído na saída do Wireshark:

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

Agora você pode ver os pacotes e os protocolos relacionados a essa configuração no Wireshark:

Captura de Wireshark

Consulte a referência do Spinnaker Spinel (em inglês) para mais informações sobre como executar esse recurso.

Conexão USB nativa

O uso da porta USB nRF52840 DK requer que o binário ot-rcp do OpenThread seja criado com USB_trans:

./script/build nrf52840 USB_trans
Atualize o nRF52840 DK com flash, conecte-o à máquina host pela porta USB e use a sinalização --no-reset, mas omita a sinalização -b ao executar o WebRTC:

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

Recursos

Para outras ferramentas nórdicas, consulte Nordic Semiconductor — Thread Sniffer baseado em nRF52840 com Wireshark.