In dieser Anleitung wird beschrieben, wie Sie Wireshark konfigurieren und Pyspinel ausführen, um Pakete aus einem Thread-Netzwerk zu sniffen.
Informationen zur Verwendung des Wireshark-extcap-Plug-ins für das Paket-Sniffing finden Sie unter Paket-Sniffing mit extcap.
Sniffer-Umgebung einrichten
Führen Sie zuerst die folgenden Schritte aus:
- Lesen Sie die Anforderungen für das Paket-Sniffen.
- Wireshark installieren und konfigurieren
- Installieren Sie Pyspinel und die Abhängigkeiten ohne extcap.
Sniffer erstellen
Erstellen und flashen Sie ein NCP-Gerät, das als Sniffer dient, mithilfe der ot-rcp
-Binärausgabe.
Nordic nRF52840
Wenn Sie das Nordic nRF52840-Beispiel als Sniffer verwenden 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 in src/nrf52840/transport-config.h
nach der Zeile #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200
und ersetzen Sie sie durch #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800
.
Erstellen Sie die Binärdatei:
./script/build nrf52840 UART_trans
Wandeln Sie die Binärausgabe von ot-rcp
in Hexadezimalzahlen um:
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 nRF52840 flashen beschrieben.
Deaktivieren Sie das Massenspeichergerät (Mass Storage Device, MSD) auf dem nRF52840, um Probleme mit Datenbeschädigungen oder -ausfällen bei der 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-Netzwerkeigenschaften
Bevor Sie fortfahren, rufen Sie die folgenden Eigenschaften für das Thread-Netzwerk ab, das Sie sniffen möchten. Sie benötigen sie für die Wireshark-Konfiguration und zum Ausführen des Pyspinel-Sniffers.
Mesh-Lokales Präfix
So rufen Sie das lokale Mesh-Präfix von einem Gerät im Ziel-Thread-Netzwerk ab:
Mit der OpenThread-Befehlszeile:
dataset active
Mesh Local Prefix: fd33:3333:3344:0/64wpanctl
mit einem NCP verwenden:wpanctl getprop IPv6:MeshLocalPrefix
IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"Wählen Sie in der OTBR-Web-GUI die Option Status aus. Das lokale Mesh-Präfix wird ähnlich wie
wpanctl
als IPv6:MeshLocalPrefix aufgeführt.
Kanal
So rufen Sie den Channel von einem Gerät im Ziel-Thread-Netzwerk ab:
Mit der OpenThread-Befehlszeile:
channel
15wpanctl
mit einem NCP verwenden:wpanctl getprop NCP:Channel
NCP:Channel = 15Wählen Sie in der OTBR-Web-GUI die Option 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:
Mit der OpenThread-Befehlszeile:
networkkey
33334444333344443333444433334444wpanctl
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 |
|
||||
-c or --channel |
|
||||
--no-reset |
|
||||
--crc |
|
||||
-b or --baudrate |
|
||||
--rssi |
|
||||
--tap |
|
Sniffer ausführen
Verwenden Sie den spezifischen Gerätepfad für Ihren NCP und den Kanal für das Thread-Netzwerk, das Sie sniffen möchten.
Wenn Sie dieser Anleitung folgen, sollte das nRF52840 DK über den Debug-Port mit dem Hostcomputer verbunden sein, wie unter nRF52840 flashen beschrieben. Wenn Sie den Pyspinel-Sniffer ausführen möchten, verwenden Sie das Flag -b
, um die Baudrate anzugeben (falls sie vom Standardwert geändert wurde), und lassen Sie das Flag --no-reset
weg.
Wenn Sie Wireshark so konfigurieren, dass RSSI angezeigt wird, müssen Sie beim Ausführen des Sniffer-Tools auch das Flag --rssi
angeben. So sniffen Sie beispielsweise auf Kanal 15 mit einem Gerät, das an /dev/ttyACM0
montiert ist und RSSI in der Wireshark-Ausgabe enthält:
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 zugehörigen Protokolle für diese Konfiguration in Wireshark sehen können:
Weitere Informationen zum Ausführen des Pyspinel-Sniffers finden Sie in der Spinel-Sniffer-Referenz.
Native USB-Verbindung
Wenn Sie den USB-Port des nRF52840 DK verwenden möchten, muss das OpenThread-ot-rcp
-Binärprogramm 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
, aber lassen Sie das Flag -b
beim Ausführen des Sniffers weg:
python sniffer.py -c 15 -u /dev/ttyACM0 --crc --no-reset --rssi | wireshark -k -i -
Ressourcen
Weitere Nordic-Tools finden Sie unter Nordic Semiconductor – Thread-Sniffer auf Basis von nRF52840 mit Wireshark.