Wąchanie pakietów z Pyspinel

Wyświetl źródło na GitHubie

Ten przewodnik opisuje, jak skonfigurować program Wireshark i uruchomić Pyspinel, aby pobierać pakiety z sieci typu Thread.

Informacje o tym, jak korzystać z wtyczki Wireshark extcap do przechwytywania pakietów, znajdziesz w artykule Przechwytywanie pakietów przy użyciu extcap.

Skonfiguruj środowisko sniffera

Zanim zaczniesz, wykonaj te czynności:

Zbuduj sniffer

Zbuduj i zsynchronizuj urządzenie NCP, aby użyć je jako sniffera przy użyciu danych wyjściowych ot-rcp.

Nordic nRF52840

Aby skonfigurować przykład skandynawskiego nRF52840 do wykorzystania jako sniffera, skopiuj openthread/ot-nrf528xx i skonfiguruj środowisko kompilacji:

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

Ustaw szybkość transmisji na 460 800. Znajdź wiersz #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 w src/nrf52840/transport-config.h i zastąp go #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800.

Utwórz plik binarny:

./script/build nrf52840 UART_trans

Przekonwertuj dane binarne ot-rcp na szesnastkowe:

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

Prześlij plik ot-rcp.hex na tablicę nRF52840 zgodnie z opisem w tym artykule.

Wyłącz pamięć masową na urządzeniu nRF52840, aby uniknąć problemów z uszkodzeniem danych lub spadkiem podczas korzystania z portu debugowania:

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.

Właściwości sieci wątku

Zanim przejdziesz dalej, pobierz następujące właściwości sieci Thread, którą chcesz monitorować. Będą potrzebne do skonfigurowania Wiresharka i uruchomienia sniffera Pyspinel.

Lokalny prefiks sieci typu mesh

Aby pobrać lokalny prefiks sieci typu mesh z urządzenia w sieci docelowej:

  1. Za pomocą interfejsu wiersza poleceń OpenThread:

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

  2. Użycie tagu wpanctl z numerem NCP:

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

  3. Korzystając z GUI w przeglądarce OTBR, wybierz Stan. Lokalny prefiks sieci typu mesh ma nazwę IPv6:MeshLocalPrefiks, podobną do wpanctl.

kanału

Aby pobrać kanał z urządzenia w sieci docelowej:

  1. Za pomocą interfejsu wiersza poleceń OpenThread:

    channel
    15
    

  2. Użycie tagu wpanctl z numerem NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. Korzystając z GUI w przeglądarce OTBR, wybierz Stan. Kanał jest wymieniony jako NCP:Channel, podobny do kanału wpanctl.

Klucz sieci

Wireshark odszyfrowuje pakiety po ich przechwyceniu z użyciem klucza sieciowego wątku. Aby pobrać klucz sieci z urządzenia w sieci docelowej:

  1. Za pomocą interfejsu wiersza poleceń OpenThread:

    networkkey
    33334444333344443333444433334444
    

  2. Użycie tagu wpanctl z numerem NCP:

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

Klucz sieciowy Thread nie jest dostępny w interfejsie internetowym OTBR.

Opcje sniffera

Opcje
-u or --uart
Wartość domyślna
Brak – musisz podać, jeśli używasz urządzenia z połączeniem szeregowym, a nie gniazdem.
Description
Flaga -u lub --uart, po której następuje ścieżka urządzenia, na przykład /dev/ttyUSB0.
-c or --channel
Wartość domyślna
11
Description
Flaga -c lub --channel, a potem kanał skonfigurowany w sieci z wątkami, na którym odbierane są pakiety.
--no-reset
Wartość domyślna
Ta flaga zastępuje domyślne zachowanie.
Description
Flaga --no-reset jest potrzebna, jeśli urządzenie NCP jest połączone z hostem przy użyciu natywnego połączenia USB.
--crc
Wartość domyślna
Ta flaga zastępuje domyślne zachowanie.
Description
W przypadku platform takich jak TI i Nordic półprzewodniki do tworzenia wątków wymagane jest oznaczenie flagi --crc. Flaga ponownie oblicza CRC, aby uniknąć ostrzeżenia „Fad FCS” (sekwencja sprawdzania ramki) w Wireshark.
-b or --baudrate
Wartość domyślna
115200
Description
Flaga -b lub --baudrate służy do zastąpienia domyślnej szybkości transmisji. Ustaw tę wartość na taką samą szybkość transmisji bitów co w przypadku kompilacji NCP (zalecamy 460 800).
--rssi
Wartość domyślna
Ta flaga zastępuje domyślne zachowanie.
Description
Flaga --rssi pozwala zagwarantować, że dane RSSI są uwzględniane w danych wyjściowych narzędzia pcap. Użyj tej flagi, jeśli w Wireshark włączona jest opcja format TI CC24xx FCS.
--tap
Wartość domyślna
Ta flaga zastępuje domyślne zachowanie.
Description
Flaga --tap określa DLT_IEEE802_15_4_TAP(283) w przypadku formatu ramki z pseudonagłówkiem zawierającym znaki TLV z metadanymi (takimi jak FCS, RSSI, LQI czy Channel). Jeśli nie określisz tego ustawienia, domyślnie zostanie użyta wartość DLT_IEEE802_15_4_WITHFCS(195) z dodatkowymi RSSI i LQI po klatce PhY, tak jak w formacie TI CC24xx FCS. Użyj tej flagi, jeśli opcja ITU-T CRC-16 jest włączona w aplikacji Wireshark. Jeśli ta opcja nie jest włączona w Wireshark, nie używaj tej flagi.

Uruchom sniffer

Pamiętaj, aby użyć ścieżki urządzenia dla swojego NCP i kanału sieci, którą chcesz przechwytywać.

W tym przewodniku port nRF52840 DK należy do niego podłączyć przez port debugowania zgodnie z opisem w sekcji Flash the RR52840. Aby uruchomić sniffer Pyspinel, użyj flagi -b, aby określić szybkość transmisji (jeśli została zmieniona z domyślnej) i pominąć flagę --no-reset.

Jeśli skonfigurujesz program Wireshark tak, aby wyświetlał RSSI, musisz też dołączyć flagę --rssi podczas uruchamiania sniffera. Aby na przykład monitorować kanał 15 za pomocą urządzenia podłączonego do kanału /dev/ttyACM0 z funkcją RSSI w danych wyjściowych Wireshark:

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

Pakiety i powiązane protokoły powinny być teraz dostępne w Wireshark:

Aparat Wireshark

Więcej informacji o skanowaniu sniffera Pyspinel znajdziesz w tym artykule.

Natywne połączenie USB

Przez port USB nRF52840 DK musi być utworzony plik binarny OpenThread ot-rcp z użyciem USB_trans:

./script/build nrf52840 USB_trans
Wtyczka Flash nRF52840 DK należy połączyć z hostem przez port USB, a następnie użyć flagi --no-reset, pomijając sniffer:

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

Zasoby

Więcej informacji o nordykach znajdziesz w artykule Nordic półprzewodnik – sniffer do nici oparty na nRF52840 firmy Wireshark.