Przechwytywanie pakietów za pomocą Pyspinel

Wyświetl źródło na GitHubie

Ten przewodnik opisuje, jak skonfigurować Wireshark i uruchomić Pyspinel do wykrywania pakietów z sieci Thread.

Aby użyć wtyczki Wireshark extcap do przechwytywania pakietów, przeczytaj artykuł Przechwytywanie pakietów przy użyciu rozszerzenia extcap.

Konfigurowanie środowiska sniffera

Zanim zaczniesz, wykonaj te czynności:

Stwórz sniffera

Użyj wyjścia binarnego ot-rcp, aby utworzyć i zainstalować urządzenie NCP, które pełni rolę sniffera.

Nordycki nRF52840

Aby skonfigurować skandynawski przykład nRF52840 do użycia jako sniffer, 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ź linię #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 w src/nrf52840/transport-config.h i zastąpić go elementem #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800.

Skompiluj plik binarny:

./script/build nrf52840 UART_trans

Przekonwertuj dane wyjściowe binarne ot-rcp na wartości szesnastkowe:

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

Wyślij plik ot-rcp.hex na płytkę nRF52840 zgodnie z opisem w tym artykule: Błysk nRF52840

Wyłącz urządzenie masowe (MSD) w nRF52840, aby uniknąć problemów z danymi może zostać uszkodzony lub zniknie podczas używania 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 Thread

Zanim przejdziesz dalej, pobierz te właściwości sieci Thread, które chcesz wąchać. Będą potrzebne do konfiguracji programu Wireshark i uruchomienia systemu Pyspinel węchem.

Lokalny prefiks sieci typu mesh

Aby uzyskać lokalny prefiks sieci typu 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. Używanie identyfikatora wpanctl z NCP:

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

  3. W GUI OTBR Web GUI wybierz opcję Stan. Lokalny prefiks sieci typu mesh jest wymieniony jako IPv6:MeshLocalPrefix (podobne do wpanctl).

Kanał

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

  1. Za pomocą interfejsu wiersza poleceń OpenThread:

    channel
    15
    

  2. Używanie identyfikatora wpanctl z NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. W GUI OTBR Web GUI wybierz opcję Stan. Kanał jest podany jako NCP:Kanał podobny do parametru wpanctl.

Klucz sieciowy

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

  1. Za pomocą interfejsu wiersza poleceń OpenThread:

    networkkey
    33334444333344443333444433334444
    

  2. Używanie identyfikatora wpanctl z 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 – tę wartość należy podać, jeśli używasz urządzenia z z połączeniem szeregowym, a nie z gniazdem ściennym.
Opis
Flaga -u lub --uart, po której następuje ścieżkę urządzenia, np. /dev/ttyUSB0.
-c or --channel
Wartość domyślna
11
Opis
Zarejestrowano flagę -c lub --channel przez kanał skonfigurowany w sieci Thread, na którym mogą przechwytywać pakiety.
--no-reset
Wartość domyślna
Ta flaga zastępuje działanie domyślne.
Opis
Flaga --no-reset jest wymagana, jeśli Twój NCP urządzenie jest połączone z hostem przez natywny port USB. połączenia.
--crc
Wartość domyślna
Ta flaga zastępuje działanie domyślne.
Opis
Flaga --crc jest potrzebna w przypadku platform takich jak: Płyty półprzewodnikowe TI i Skandynawskie. Flaga przelicza kod CRC, aby uniknąć błędu „Bad FCS” (Zły wynik) (sprawdzanie ramki ).
-b or --baudrate
Wartość domyślna
115200
Opis
Używana jest flaga -b lub --baudrate aby zastąpić domyślną szybkość transmisji bitów. Ustaw tę wartość na taką samą bodwa używana w NCP kompilacja (zalecamy 460800).
--rssi
Wartość domyślna
Ta flaga zastępuje działanie domyślne.
Opis
Flaga --rssi służy do sprawdzania, czy RSSI zawarte w danych wyjściowych pcap. Musisz użyć tej flagi, jeśli TI CC24xx FCS format jest włączona w programie Wireshark.
--tap
Wartość domyślna
Ta flaga zastępuje działanie domyślne.
Opis
Flaga --tap określa DLT_IEEE802_15_4_TAP(283) dla formatu ramki, z pseudonagłówkiem zawierającym pliki TLV z metadanymi (np. FCS, RSSI, LQI i kanał). Jeśli nie podasz żadnej wartości, Aplikacja DLT_IEEE802_15_4_WITHFCS(195) będzie używana przez domyślna z dodatkowym RSSI i LQI po PHY bezpośrednio, jak w formacie TI CC24xx FCS. Musisz użyć tej flagi, jeśli ITU-T CRC-16, jest włączona w programie Wireshark. Jeśli ta opcja nie jest włączona w programie Wireshark, nie używaj tej flagi.

Uruchom sniffera

Pamiętaj, aby użyć konkretnej ścieżki urządzenia dla NCP oraz kanału dla Sieć Thread, którą próbujesz wykryć.

Jeśli postępujesz zgodnie z tym przewodnikiem, do hosta należy podłączyć kontroler nRF52840 DK przez i port debugowania, zgodnie z opisem w sekcji Flash nRF52840. Aby uruchomić sniffera 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 konfigurujesz program Wireshark, aby wyświetlać RSSI, musisz także dodać --rssi po uruchomieniu narzędzia sniffer. Na przykład do wąchania Channel 15 za pomocą urządzenie podłączone do źródła danych /dev/ttyACM0 z RSSI dołączonym do danych wyjściowych programu Wireshark:

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

Powinny być teraz widoczne pakiety i powiązane z nimi protokoły Konfiguracja w programie Wireshark:

Przechwytywanie Wireshark

Zobacz Spinel Sniffer referencyjnym znajdziesz więcej informacji na temat uruchamiania sniffera Pyspinel.

Natywne połączenie USB

Używanie portu USB nRF52840 DK wymaga pliku binarnego OpenThread ot-rcp do utworzona za pomocą usługi USB_trans:

./script/build nrf52840 USB_trans
Flash nRF52840 DK połączy się z hostem przez USB port, a następnie użyj flagi --no-reset ale pomiń flagę -b przy uruchamianiu sniffera:

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

Zasoby

Informacje o dodatkowych narzędziach nordyckich znajdziesz na stronie Nordic Semiconductor – Thread Sniffer oparty na modelu nRF52840 w programie Wireshark.