Paket-Sniffing mit Pyspinel

Quelle auf GitHub ansehen

In dieser Anleitung erfahren Sie, wie Sie Wireshark konfigurieren und Pyspinel ausführen, um Pakete aus einem Thread-Netzwerk zu prüfen.

Informationen zum Verwenden des Wireshark-Erweiterungs-Plug-ins für Paket-Sniffing finden Sie unter Paket-Sniffing mit extcap.

Sniffer-Umgebung einrichten

Führen Sie zuerst die folgenden Schritte aus:

Baue den Sniffer auf

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

Nordisches nRF52840

Wenn Sie das nordische Beispiel nRF52840 als Sniffer einrichten möchten, klonen Sie openthread/ot-nrf528xx und richten Sie die Build-Umgebung ein:

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

Legen Sie die Baudrate auf 460800 fest. 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 die Binärdatei:

./script/build nrf52840 UART_trans

Konvertieren Sie die binäre Ausgabe ot-rcp in den Hex-Code:

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

Flashen Sie die Datei ot-rcp.hex auf das nRF52840-Board, wie unter Flash-nRF52840 beschrieben.

Deaktivieren Sie den Massenspeicher (MSD) auf dem nRF52840, um Probleme mit Datenbeschädigung oder -abfall zu vermeiden, wenn Sie den Fehlerbehebungsport nutzen:

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-Netzwerkeigenschaften

Bevor Sie fortfahren, rufen Sie die folgenden Attribute für das Thread-Netzwerk ab, das Sie überprüfen 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 Ziel-Thread-Netzwerk ab:

  1. Über die 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 in der 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. Über die OpenThread-Befehlszeile:

    channel
    15
    

  2. wpanctl mit einem NCP verwenden:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

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

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 Ziel-Thread-Netzwerk ab:

  1. Über die 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-Web-GUI nicht verfügbar.

Sniffer-Optionen

Optionen
-u or --uart
Standardwert
Keine: Muss angegeben werden, wenn Sie ein Gerät mit einer seriellen Verbindung verwenden und keine Socket-Verbindung.
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 in Ihrem Thread-Netzwerk konfigurierten Kanal, für den Pakete ausgegeben werden sollen.
--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-Threadboards benötigt. Das Flag berechnet den CRC neu, um eine "Bad FCS"-Warnung (Frame Check Sequence) in Wireshark zu vermeiden.
-b or --baudrate
Standardwert
115200
Beschreibung
Das Flag -b oder --baudrate wird verwendet, um die Standard-Baudrate zu überschreiben. Legen Sie für diesen Wert die gleiche Baudrate fest, die für Ihren NCP Build verwendet wird (empfohlen werden 460800).
--rssi
Standardwert
Dieses Flag überschreibt das Standardverhalten.
Beschreibung
Das Flag --rssi wird verwendet, damit RSSI 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 Frameformat an und weist einen Pseudo-Header auf, 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 dem zusätzlichen RSSI und LQI direkt nach dem 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.

Den Sniffer ausführen

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

Wenn Sie dieser Anleitung folgen, sollte der nRF52840-DK über den Fehlerbehebungsport an den Hostcomputer angehängt werden, wie unter nRF52840 beschrieben. Verwenden Sie zum Ausführen des Pyspinel-Sniffers das Flag -b, um die Baudrate anzugeben (falls die Standardeinstellung geändert wurde) und das Flag --no-reset wegzulassen.

Wenn Sie Wireshark so konfigurieren, dass RSSI angezeigt wird, müssen Sie auch das Flag --rssi einfügen, wenn Sie das Sniffer-Tool ausführen. So können Sie z. B. mit einem Gerät, das unter /dev/ttyACM0 mit RSSI in der Wireshark-Ausgabe bereitgestellt ist, auf Channel 15 sniffen:

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

Sie sollten nun die Pakete und 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 nRF52840 DK-USB-Port verwenden möchten, muss die OpenThread-Binärdatei ot-rcp mit USB_trans erstellt werden:

./script/build nrf52840 USB_trans
Flashen Sie das nRF52840-DK-Gerät und verbinden Sie es mit dem Hostcomputer. am USB-Port und verwenden Sie dann das Flag --no-reset, aber lassen Sie das Flag -b aus, 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 basierend auf nRF52840 mit Wireshark.