O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Packet Sniffing com Pyspinel

Ver fonte no GitHub

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

Para usar o plug-in do Wireshark extcap para packet sniffing, consulte packet sniffing usando extcap .

Configure o ambiente sniffer

Antes de começar, conclua as seguintes etapas:

Construir o farejador

Desenvolver e piscar um dispositivo NCP para servir como o tubo aspirador, utilizando o ot-rcp saída binária.

Nórdico nRF52840

Para configurar o exemplo Nordic nRF52840 para uso como um tubo aspirador, clone openthread/ot-nrf528xx e definir-se o ambiente de construção:

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

Definir taxa de transmissão como 460800. Encontre a linha #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 em src/nrf52840/transport-config.h , e substituí-lo com #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800 .

Construa o binário:

./script/build nrf52840 UART_trans

Converter o ot-rcp saída binária em hexadecimal:

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

Piscar o ot-rcp.hex arquivo para a placa nRF52840 conforme detalhado no flash do nRF52840 .

Desative o dispositivo de armazenamento em massa (MSD) no nRF52840 para evitar problemas com 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 de rede de thread

Antes de continuar, obtenha as seguintes propriedades para a rede Thread que você deseja farejar. Você precisará deles para configurar o Wireshark e executar o sniffer Pyspinel.

Prefixo local da malha

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

  1. Usando o OpenThread CLI:

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

  2. Usando wpanctl com um NCP:

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

  3. Usando o OTBR Web GUI, selecione Status. A malha prefixo local é listado como IPv6: MeshLocalPrefix semelhante ao wpanctl .

Canal

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

  1. Usando o OpenThread CLI:

    channel
    15
    

  2. Usando wpanctl com um NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. Usando o OTBR Web GUI, selecione Status. O canal é listado como NCP: Canal semelhante ao wpanctl .

Chave de rede

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

  1. Usando o OpenThread CLI:

    networkkey
    33334444333344443333444433334444
    

  2. Usando wpanctl com um NCP:

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

A Thread Network Key não está disponível no OTBR Web GUI.

Opções de sniffer

Opções
-u or --uart
Valor padrão
Nenhum - deve ser fornecido se você estiver usando um dispositivo com uma conexão serial e não uma conexão de soquete.
Descrição
O -u ou --uart bandeira seguido por um caminho de dispositivo, tais como /dev/ttyUSB0 .
-c or --channel
Valor padrão
11
Descrição
A -c ou --channel bandeira seguido pelo canal configurado no seu segmento de rede, sobre a qual os pacotes Sniff.
--no-reset
Valor padrão
Este sinalizador substitui o comportamento padrão.
Descrição
O --no-reset bandeira é necessário se o dispositivo NCP está ligado para o anfitrião com a conexão USB nativa.
--crc
Valor padrão
Este sinalizador substitui o comportamento padrão.
Descrição
O --crc flag é necessário para plataformas como TI e Nordic Semiconductor Placas de Tópicos. O sinalizador recalcula o CRC para evitar um aviso 'Bad FCS' (sequência de verificação de quadro) no Wireshark.
-b or --baudrate
Valor padrão
115200
Descrição
O -b ou --baudrate bandeira é usada para substituir a taxa de transmissão padrão. Definir este valor para a mesma taxa de transmissão utilizado com a sua construção NCP (recomendamos 460.800).
--rssi
Valor padrão
Este sinalizador substitui o comportamento padrão.
Descrição
O --rssi bandeira é usado para assegurar o RSSI está incluído na saída pcap. Você deve usar esse sinalizador se o formato de TI CC24xx FCS opção é ativada no Wireshark.
--tap
Valor padrão
Este sinalizador substitui o comportamento padrão.
Descrição
O --tap especifica bandeira DLT_IEEE802_15_4_TAP(283) para o formato de trama, com um pseudo-cabeçalho contendo TLVs com metadados (tais como FCS, RSSI, LQI, Channel). Se não for especificado, DLT_IEEE802_15_4_WITHFCS(195) seria utilizada como padrão com o RSSI adicional e LQI seguinte quadro PHY directamente, como no formato de TI CC24xx FCS. Você deve usar esse sinalizador se o ITU-T CRC-16 opção é ativada no Wireshark. Se essa opção não estiver habilitada no Wireshark, não use este sinalizador.

Execute o farejador

Certifique-se de usar o caminho de dispositivo específico para seu NCP e o canal para a rede Thread que você está tentando farejar.

Se, após esta guia, a nRF52840 DK deve ser ligado à máquina hospedeira pela porta de depuração, tal como descrito em flash do nRF52840 . Para executar o Pyspinel sniffer, utilize o -b flag para especificar a taxa de transmissão (se foi alterado a partir do padrão) e omitir o --no-reset bandeira.

Se você Configurar Wireshark para exibir RSSI, você também deve incluir o --rssi flag quando você executar a ferramenta sniffer. Por exemplo, para farejar no canal 15 por meio de um dispositivo montado em /dev/ttyACM0 com RSSI incluídos na saída Wireshark:

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

Agora você deve ser capaz de visualizar os pacotes e protocolos relacionados a esta configuração no Wireshark:

Captura Wireshark

Consulte a referência Spinel sniffer para mais informações sobre a execução do Pyspinel sniffer.

Conexão USB nativa

Usando a porta USB nRF52840 DK exige o OpenThread ot-rcp binário a ser construído com USB_trans :

./script/build nrf52840 USB_trans
flash do nRF52840 DK, conecte-o ao computador host pela porta USB , então use o --no-reset bandeira, mas omitir o -b flag ao executar o sniffer:

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

Recursos

Para ferramentas nórdicos adicionais, consulte o Nordic Semiconductor - Rosca Sniffer baseado em nRF52840 com Wireshark .