Paket-Sniffing mit Pyspinel

Quelle auf GitHub ansehen

In diesem Leitfaden wird beschrieben, wie Wireshark konfiguriert und Pyspinel ausgeführt wird, um Pakete aus einem Thread-Netzwerk zu erkennen.

Wie Sie das Wireshark-extcap-Plug-in für das Sniffing von Paketen verwenden, erfahren Sie unter Packet-Sniffing mit extcap.

Sniffer-Umgebung einrichten

Führen Sie zuerst die folgenden Schritte aus:

Sniffer bauen

Erstellen und Flashen Sie ein NCP-Gerät, das als Sniffer dient und die Binärausgabe ot-rcp verwendet.

Nordisch nRF52840

Klonen Sie openthread/ot-nrf528xx und richten Sie die Build-Umgebung ein, um das Nordic-Beispiel nRF52840 als Sniffer einzurichten:

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

Baudrate auf 460800 festlegen. Suchen Sie die Zeile #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 in src/nrf52840/transport-config.h und ersetzen Sie sie durch #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800.

Erstellen Sie das Binärprogramm:

./script/build nrf52840 UART_trans

Konvertieren Sie die Binärausgabe von ot-rcp in Hexadezimalwerte:

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

Flash-Datei ot-rcp.hex auf das nRF52840-Board, wie unter nRF52840 blinken beschrieben.

Deaktivieren Sie Massenspeichergeräte auf dem nRF52840, um Probleme mit Datenbeschädigung oder -abfällen bei Verwendung des Debug-Ports zu vermeiden:

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.

Thread-Netzwerkattribute

Bevor Sie fortfahren, rufen Sie die folgenden Attribute des Thread-Netzwerks ab, das Sie schnuppern möchten. Sie benötigen sie für die Wireshark-Konfiguration und die Ausführung des Pyspinel-Sniffers.

Lokales Mesh-Präfix

So rufen Sie das lokale Mesh-Präfix von einem Gerät im Thread-Zielnetzwerk ab:

  1. Mit der OpenThread-Befehlszeile:

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

  2. wpanctl mit einem NCP verwenden:

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

  3. Wählen Sie über die OTBR-Web-GUI Status aus. Das lokale Mesh-Präfix wird als IPv6:MeshLocalPrefix ähnlich wie wpanctl aufgeführt.

Kanal

So rufen Sie den Kanal von einem Gerät im Thread-Zielnetzwerk ab:

  1. Mit der OpenThread-Befehlszeile:

    channel
    15
    

  2. wpanctl mit einem NCP verwenden:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. Wählen Sie über die OTBR-Web-GUI Status aus. Der Kanal wird als NCP:Channel aufgeführt, ähnlich wie wpanctl.

Netzwerkschlüssel

Der Thread-Netzwerkschlüssel wird von Wireshark verwendet, um Pakete nach der Erfassung zu entschlüsseln. So rufen Sie den Netzwerkschlüssel von einem Gerät im Thread-Zielnetzwerk ab:

  1. Mit der OpenThread-Befehlszeile:

    networkkey
    33334444333344443333444433334444
    

  2. wpanctl mit einem NCP verwenden:

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

Der Thread-Netzwerkschlüssel ist in der OTBR-Weboberfläche nicht verfügbar.

Sniffer-Optionen

Optionen
-u or --uart
Standardwert
Keine: Muss angegeben werden, wenn Sie ein Gerät mit einer seriellen Verbindung und nicht mit einer Socket-Verbindung verwenden.
Beschreibung
Das Flag -u oder --uart, gefolgt von einem Gerätepfad wie /dev/ttyUSB0.
-c or --channel
Standardwert
11
Beschreibung
Das Flag -c oder --channel, gefolgt vom Kanal, der in Ihrem Thread-Netzwerk konfiguriert ist, an dem Pakete erkannt werden können.
--no-reset
Standardwert
Dieses Flag überschreibt das Standardverhalten.
Beschreibung
Das Flag --no-reset ist erforderlich, wenn Ihr NCP-Gerät über die native USB-Verbindung mit dem Host verbunden ist.
--crc
Standardwert
Dieses Flag überschreibt das Standardverhalten.
Beschreibung
Das Flag --crc wird für Plattformen wie TI und Nordic Semiconductor Thread-Boards benötigt. Das Flag berechnet den CRC neu, um die Warnung „Schlechter FCS“ (Frame Check Sequenz) in Wireshark zu vermeiden.
-b or --baudrate
Standardwert
115200
Beschreibung
Das Flag -b oder --baudrate wird verwendet, um die Standard-Baudrate zu überschreiben. Setzen Sie diesen Wert auf dieselbe Baudrate, die Sie für Ihren NCP-Build verwendet haben (wir empfehlen 460800).
--rssi
Standardwert
Dieses Flag überschreibt das Standardverhalten.
Beschreibung
Das Flag --rssi wird verwendet, damit das RSSI-Objekt in der pcap-Ausgabe enthalten ist. Sie müssen dieses Flag verwenden, wenn die Option TI CC24xx-FCS-Format in Wireshark aktiviert ist.
--tap
Standardwert
Dieses Flag überschreibt das Standardverhalten.
Beschreibung
Das Flag --tap gibt DLT_IEEE802_15_4_TAP(283) für das Frame-Format mit einem Pseudo-Header an, der TLVs mit Metadaten (z. B. FCS, RSSI, LQI, Kanal) enthält. Wenn nicht angegeben, wird DLT_IEEE802_15_4_WITHFCS(195) standardmäßig mit den zusätzlichen RSSI- und LQI-Werten direkt im PHY-Frame verwendet, wie im TI CC24xx-FCS-Format. Sie müssen dieses Flag verwenden, wenn die Option ITU-T CRC-16 in Wireshark aktiviert ist. Verwenden Sie dieses Flag nicht, wenn diese Option in Wireshark nicht aktiviert ist.

Sniffer ausführen

Verwenden Sie den spezifischen Gerätepfad für Ihren NCP und den Kanal für das Thread-Netzwerk, das Sie schnuppern möchten.

Wenn Sie dieser Anleitung folgen, sollte der nRF52840-DK wie im Abschnitt Flash nRF52840 beschrieben über den Debug-Port an den Hostcomputer angehängt werden. Verwenden Sie zum Ausführen des Pyspinel-Sniffers das Flag -b, um die Baudrate anzugeben (falls sie vom Standardwert abweicht), und lassen Sie das Flag --no-reset weg.

Wenn Sie Wireshark für die Anzeige von RSSI konfigurieren, müssen Sie beim Ausführen des Sniffer-Tools auch das Flag --rssi angeben. Beispiel: So schnüffeln Sie in Kanal 15 mit einem unter /dev/ttyACM0 bereitgestellten Gerät mit RSSI in der Wireshark-Ausgabe:

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

Sie sollten jetzt die Pakete und die zugehörigen Protokolle für diese Konfiguration in Wireshark ansehen können:

Wireshark-Aufnahme

Weitere Informationen zum Ausführen des Pyspinel-Sniffers finden Sie in der Spinel-Sniffer-Referenz.

Native USB-Verbindung

Wenn Sie den nKF-52840-DK-USB-Port verwenden, muss das OpenThread-Binärprogramm ot-rcp mit USB_trans erstellt werden:

./script/build nrf52840 USB_trans
Flashen Sie den nRF52840-DK, verbinden Sie ihn über den USB-Port mit dem Hostcomputer und verwenden Sie dann das Flag --no-reset, wenn Sie den Sniffer ausführen:

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

Ressourcen

Weitere nordische Tools finden Sie unter Nordic Semiconductor – Thread Sniffer based on nRF52840 with Wireshark.