Wycieczka pakietów z Pyspinel

Wyświetl źródło w GitHub

Ten przewodnik wyjaśnia, jak skonfigurować Wireshark i uruchomić Pyspinela do wąchania pakietów z sieci wątków.

Aby dowiedzieć się, jak używać wtyczki Wireshark extcap do wciągania pakietów, przeczytaj artykuł Korzystanie z Sneffingu za pomocą pakietu extcap.

Konfigurowanie środowiska sniffera

Zanim zaczniesz, wykonaj te czynności:

Sniffer

Skompiluj i zapisz Flasha na urządzeniu NCP, które będzie działać jako sniffer, używając wyjścia binarnego ot-rcp.

Kraje nordyckie NRF52840

Aby skonfigurować przykład Nordic nRF52840 jako sniffera, klonujopenthread/ot-nrf528xx i skonfiguruj środowisko kompilacji:

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

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

Utwórz plik binarny:

./script/build nrf52840 UART_trans

Konwertuj dane binarne ot-rcp na szesnastkowe wartości:

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

Umieść plik ot-rcp.hex na płytce nRF52840 zgodnie z opisem w sekcji Flash nRF52840.

Wyłącz urządzenie Mass Storage (MSD) na urządzeniu nRF52840, aby uniknąć problemów z uszkodzeniem lub spadkiem ilości danych 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, skonfiguruj następujące właściwości sieci wątków, do której chcesz wąchać. Będą Ci potrzebne do skonfigurowania Wiresharka i uruchomienia sniffera Pyspinel.

Lokalny prefiks sieci typu mesh

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

  1. Korzystanie z interfejsu wiersza poleceń OpenThread:

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

  2. Korzystanie z wpanctl z numerem NCP:

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

  3. Za pomocą interfejsu OTBR Web GUI wybierz Stan. Prefiks lokalny sieci typu mesh ma postać IPv6:MeshLocalPrefix podobny do wpanctl.

Kanał

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

  1. Korzystanie z interfejsu wiersza poleceń OpenThread:

    channel
    15
    

  2. Korzystanie z wpanctl z numerem NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. Za pomocą interfejsu OTBR Web GUI wybierz Stan. Kanał jest określony jako NCP:Channel podobny do wpanctl.

Klucz sieciowy

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

  1. Korzystanie z interfejsu wiersza poleceń OpenThread:

    networkkey
    33334444333344443333444433334444
    

  2. Korzystanie z wpanctl z numerem NCP:

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

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

Opcje sniffera

Opcje
-u or --uart
Wartość domyślna
Brak – podaj, jeśli używasz urządzenia z połączeniem szeregowym, a nie gniazdem.
Opis
Flaga -u lub --uart, a po niej ścieżka urządzenia, np. /dev/ttyUSB0.
-c or --channel
Wartość domyślna
11
Opis
Flaga -c lub --channel, a następnie kanał skonfigurowany w sieci wątków, na którym mają znajdować się pakiety wąchane.
--no-reset
Wartość domyślna
Ta flaga zastępuje domyślne działanie.
Opis
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 działanie.
Opis
Flaga --crc jest potrzebna na platformach takich jak płyty TI i nordic Semiconductor Thread. Flaga używa ponownie CRC, aby uniknąć ostrzeżenia „Bad FCS” (sekwencja sprawdzania ramek) w programie Wireshark.
-b or --baudrate
Wartość domyślna
115200
Opis
Flaga -b lub --baudrate służy do zastępowania domyślnej szybkości transmisji. Ustaw tę wartość na taką samą szybkość transmisji bitów jak w kompilacji CNC (zalecamy 460800).
--rssi
Wartość domyślna
Ta flaga zastępuje domyślne działanie.
Opis
Flaga --rssi służy do umieszczenia RSSI w danych wyjściowych pcap. Musisz użyć tej flagi, jeśli w programie Wireshark jest włączona opcja format TI CC24xx FCS.
--tap
Wartość domyślna
Ta flaga zastępuje domyślne działanie.
Opis
Flaga --tap określa format ramki DLT_IEEE802_15_4_TAP(283) z pseudonagłówkiem zawierającym pliki TLV z metadanymi (takimi jak FCS, RSSI, LQI, Channel). Jeśli nie określono tego parametru, wartość DLT_IEEE802_15_4_WITHFCS(195) będzie używana domyślnie z dodatkowymi RSSI i LQI bezpośrednio po klatce PHY, jak w formacie TI CC24xx FCS. Tego parametru musisz użyć, jeśli w programie Wireshark jest włączona opcja ITU-T CRC-16. Jeśli ta opcja nie jest włączona w programie Wireshark, nie używaj tej flagi.

Uruchom sniffera

Pamiętaj, aby użyć ścieżki określonego urządzenia NCP i kanału sieci, którą chcesz wąchać.

Jeśli wykonasz instrukcje z tego przewodnika, numer nRF52840 DK powinien być dołączony do komputera hosta przez port debugowania, zgodnie z opisem we Flashu nRF52840. Aby uruchomić sniffera Pyspinela, użyj flagi -b, aby określić szybkość transmisji (jeśli została zmieniona z domyślnej), i pomiń flagę --no-reset.

Jeśli skonfiguruj Wireshark do wyświetlania RSSI, musisz też dodać flagę --rssi podczas uruchamiania narzędzia sniffera. Na przykład do nasłuchiwania kanału 15 przy użyciu urządzenia podłączonego do stacji /dev/ttyACM0 z usługą RSSI w wyniku Wireshark:

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

Teraz powinny być dostępne pakiety i powiązane protokoły dla tej konfiguracji w Wireshark:

Program do tworzenia rekinów

Więcej informacji o uruchomieniu sniffera Pyspinela znajdziesz w dokumentacji sniffera Spinel.

Natywne połączenie USB

Port USB nRF52840 DK wymaga OpenThreadot-rcp binarny do kompilacji przy użyciuUSB_trans :

./script/build nrf52840 USB_trans
Flash nRF52840 DKpołącz go z hostem przez port USB. , a następnie użyj--no-reset ale pomiń-b flaga 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 skandynawskich znajdziesz w artykule Nordic Semiconductor – Thread Sniffer oparte na nRF52840 z Wireshark.