Przechwytywanie pakietów za pomocą Pyspinel

Wyświetl źródło w GitHubie

Z tego przewodnika dowiesz się, jak skonfigurować Wiresharka i uruchomić Pyspinel, aby skanować pakiety z sieci Thread.

Aby używać wtyczki extcap w Wireshark do wychwytywania pakietów, zapoznaj się z artykułem Wychwytywanie pakietów za pomocą extcap.

Konfigurowanie środowiska sniffera

Zanim zaczniesz, wykonaj te czynności:

Tworzenie sniffera

Utwórz i przeflashuj urządzenie NCP, aby służyło jako sniffer, używając wyjścia binarnego ot-rcp.

Nordic nRF52840

Aby skonfigurować przykład Nordic nRF52840 do użycia jako sniffer, sklonuj openthread/ot-nrf528xx i skonfiguruj środowisko kompilacji:

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

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

Kompilowanie pliku binarnego:

./script/build nrf52840 UART_trans

Przekształć binarne dane wyjściowe ot-rcp na szesnastkowe:

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

Wgraj plik ot-rcp.hex na płytkę nRF52840 zgodnie z instrukcjami w artykule Wgrywanie oprogramowania na płytkę nRF52840.

Aby uniknąć problemów z uszkodzeniem lub utratą danych podczas korzystania z portu debugowania, wyłącz urządzenie masowej pamięci (MSD) na nRF52840:

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 Thread

Zanim przejdziesz dalej, uzyskaj te właściwości sieci Thread, którą chcesz skanować. Będą one potrzebne do skonfigurowania Wiresharka i uruchomienia sniffera Pyspinel.

Mesh Local Prefix

Aby uzyskać prefiks lokalny sieci Mesh z urządzenia w docelowej sieci Thread:

  1. Za pomocą interfejsu wiersza poleceń OpenThread:

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

  2. Korzystanie z usługi wpanctl z NCP:

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

  3. W interfejsie internetowym OTBR wybierz Stan. Prefiks lokalny sieci Mesh jest wyświetlany jako IPv6:MeshLocalPrefix, podobnie jak wpanctl.

Kanał

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

  1. Za pomocą interfejsu wiersza poleceń OpenThread:

    channel
    15
    

  2. Korzystanie z usługi wpanctl z NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. W interfejsie internetowym OTBR wybierz Stan. Kanał jest wyświetlany jako NCP:Channel, podobnie jak wpanctl.

Klucz sieci

Klucz sieciowy Thread jest używany przez Wireshark do odszyfrowywania pakietów po przechwyceniu. Aby uzyskać klucz sieci z urządzenia w docelowej sieci Thread:

  1. Za pomocą interfejsu wiersza poleceń OpenThread:

    networkkey
    33334444333344443333444433334444
    

  2. Korzystanie z usługi wpanctl z NCP:

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

Klucz sieci Thread jest niedostępny w interfejsie internetowym OTBR.

Opcje sniffera

Opcje
-u or --uart
Wartość domyślna
Brak – musi być podany, jeśli używasz urządzenia z połączeniem szeregowym, a nie z gniazdem.
Opis
Flaga -u lub --uart, a za nią ścieżka urządzenia, np. /dev/ttyUSB0.
-c or --channel
Wartość domyślna
11
Opis
Flaga -c lub --channel, a za nią kanał skonfigurowany w Twojej sieci Thread, na której mają być przechwytywane pakiety.
--no-reset
Wartość domyślna
Ta flaga zastępuje działanie domyślne.
Opis
Flaga --no-reset jest potrzebna, jeśli urządzenie NCP jest połączone z hostem za pomocą natywnego połączenia USB.
--crc
Wartość domyślna
Ta flaga zastępuje działanie domyślne.
Opis
Flaga --crc jest potrzebna w przypadku platform takich jak płyty Thread firmy TI i Nordic Semiconductor. Flaga ponownie oblicza CRC, aby uniknąć ostrzeżenia „Bad FCS” (sekwencja sprawdzania ramki) w Wireshark.
-b or --baudrate
Wartość domyślna
115200
Opis
Flaga -b lub --baudrate służy do zastąpienia domyślnej szybkości transmisji. Ustaw tę wartość na tę samą szybkość transmisji danych, która jest używana w kompilacji NCP (zalecamy 460800).
--rssi
Wartość domyślna
Ta flaga zastępuje działanie domyślne.
Opis
Flaga --rssi służy do zapewnienia, że identyfikator RSSI jest uwzględniany w wyjściu pcap. Musisz użyć tej flagi, jeśli opcja Format FCS TI CC24xx jest włączona w Wireshark.
--tap
Wartość domyślna
Ta flaga zastępuje działanie domyślne.
Opis
Flaga --tap określa format ramki DLT_IEEE802_15_4_TAP(283), z pseudonagłówkiem zawierającym pola TLV z metadanymi (np. FCS, RSSI, LQI, Channel). Jeśli nie zostanie określony, DLT_IEEE802_15_4_WITHFCS(195) będzie używany domyślnie z dodatkowymi wartościami RSSI i LQI bezpośrednio po ramce PHY, tak jak w formacie FCS TI CC24xx. Musisz użyć tej flagi, jeśli opcja ITU-T CRC-16 jest włączona w Wireshark. Jeśli ta opcja nie jest włączona w Wireshark, nie używaj tego parametru.

Uruchamianie sniffera

Upewnij się, że używasz ścieżki urządzenia dla CNP i kanału dla sieci Thread, którą chcesz skanować.

Jeśli postępujesz zgodnie z tym przewodnikiem, moduł nRF52840 DK powinien być podłączony do komputera hosta przez port debugowania, zgodnie z opisem w artykule Programowanie modułów nRF52840. Aby uruchomić sniffer Pyspinel, użyj flagi -b, aby określić szybkość transmisji danych (jeśli została zmieniona w porównaniu z wartością domyślną), i pominij flagę --no-reset.

Jeśli skonfigurujesz Wiresharka tak, aby wyświetlał identyfikator RSSI, musisz też użyć flagi --rssi podczas uruchamiania narzędzia sniffera. Aby na przykład przechwytywać na kanale 15 za pomocą urządzenia zamontowanego w miejscu /dev/ttyACM0 z identyfikatorem RSSI w wyjściu Wireshark:

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

W programie Wireshark powinieneś teraz widzieć pakiety i powiązane z tą konfiguracją protokoły:

Wireshark Capture

Więcej informacji o uruchamianiu sniffera Pyspinel znajdziesz w dokumentacji sniffera Spinel.

Natywne połączenie USB

Korzystanie z portu USB nRF52840 DK wymaga utworzenia binarnego pliku OpenThread ot-rcp z użyciem flagi USB_trans:

./script/build nrf52840 USB_trans
Zaktualizuj nRF52840 DK, podłączając go do hosta przez port USB, a następnie użyj flagi --no-reset, ale pomiń flagę -b podczas uruchamiania sniffera:

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

Zasoby

Więcej informacji o narzędziach Nordic znajdziesz w artykule Nordic Semiconductor – sniffer Thread na podstawie nRF52840 z Wiresharkiem.