Packet Sniffing mit Pyspinel

<ph type="x-smartling-placeholder"></ph> Quelle auf GitHub ansehen

In diesem Leitfaden wird beschrieben, wie Sie Wireshark konfigurieren und Pyspinel zum Schnüffeln von Paketen ausführen. aus einem Thread-Netzwerk.

Informationen zur Verwendung des Wireshark-extcap-Plug-ins für das Sniffing finden Sie unter Paket-Sniffing extcap verwenden.

Sniffer-Umgebung einrichten

Führen Sie zuerst die folgenden Schritte aus:

Sniffer erstellen

Erstellen und flashen Sie ein NCP-Gerät, das als Sniffer dient, unter Verwendung der Binärausgabe ot-rcp.

Nordisch nRF52840

Wenn Sie das Nordic nRF52840-Beispiel zur Verwendung 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

Lege die Baudrate auf 460800 fest. Die Linie #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 finden in src/nrf52840/transport-config.h und ersetzen Sie es durch #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800.

Erstellen Sie die Binärdatei:

./script/build nrf52840 UART_trans

Wandeln Sie die Binärausgabe ot-rcp in einen Hexadezimalwert 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 blinken.

Massenspeichergerät (Mass Storage Device, MSD) auf nRF52840 deaktivieren, um Datenprobleme zu vermeiden bei Verwendung des Debugging-Ports beschädigt wird oder ausfällt:

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 gewünschte Thread-Netzwerk ab zu schnuppern. Sie benötigen sie für die Wireshark-Konfiguration und zum Ausführen von Pyspinel. schnüffeln.

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. Verwendung von wpanctl mit einem NCP:

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

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

Kanal

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

  1. Über die OpenThread-Befehlszeile:

    channel
    15
    

  2. Verwendung von wpanctl mit einem NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

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

Netzwerkschlüssel

Der Thread-Netzwerkschlüssel wird von Wireshark verwendet, um Pakete nach dem aufnehmen. So rufen Sie den Netzwerkschlüssel von einem Gerät im Ziel-Thread-Netzwerk ab:

  1. Über die OpenThread-Befehlszeile:

    networkkey
    33334444333344443333444433334444
    

  2. Verwendung von wpanctl mit einem NCP:

    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 du ein Gerät mit einer und keine Socket-Verbindung.
Beschreibung
Das Flag -u oder --uart, gefolgt von einen Gerätepfad wie /dev/ttyUSB0.
-c or --channel
Standardwert
11
Beschreibung
Das Flag -c oder --channel gefolgt von der in Ihrem Thread-Netzwerk konfiguriert ist. um Pakete abzufangen.
--no-reset
Standardwert
Dieses Flag überschreibt das Standardverhalten.
Beschreibung
Die Kennzeichnung --no-reset ist erforderlich, wenn dein NCP Gerät über das native USB-Kabel 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-Platinen. Die Flagge berechnet den CRC neu, um einen „Bad FCS“-Fehler zu vermeiden. (Frame-Prüfung in Wireshark.
-b or --baudrate
Standardwert
115200
Beschreibung
Das Flag -b oder --baudrate wird verwendet um die standardmäßige Baudrate zu überschreiben. Legen Sie für diesen Wert denselben Wert Baudrate, die mit deinem NCP verwendet wird build erstellen. Wir empfehlen 460800.
--rssi
Standardwert
Dieses Flag überschreibt das Standardverhalten.
Beschreibung
Mit dem Flag --rssi wird sichergestellt, dass der RSSI die in der pcap-Ausgabe enthalten sind. Sie müssen dieses Flag verwenden, TI CC24xx FCS format aktiviert ist.
--tap
Standardwert
Dieses Flag überschreibt das Standardverhalten.
Beschreibung
Das Flag --tap gibt an, DLT_IEEE802_15_4_TAP(283) für das Frameformat mit einem Pseudo-Header, der TLVs mit Metadaten (z. B. FCS, RSSI, LQI, Channel). Wenn keine Angabe erfolgt, DLT_IEEE802_15_4_WITHFCS(195) wird verwendet von Standardeinstellung mit zusätzlichem RSSI und LQI nach PHY Frame direkt zu platzieren, wie im TI CC24xx FCS-Format. Sie müssen dieses Flag verwenden, ITU-T CRC-16 ist in Wireshark aktiviert. Wenn diese Option nicht aktiviert ist, verwenden Sie dieses Flag nicht in Wireshark.

Schnüffeln

Achten Sie darauf, den spezifischen Gerätepfad für Ihren NCP und den Kanal für die Thread-Netzwerk, das du schnüffeln möchtest.

Wenn Sie sich an diese Anleitung halten, sollte der nRF52840 DK folgendermaßen an den Host-Computer angeschlossen werden: an den Debug-Port, wie im Abschnitt Flash- nRF52840 Um den Pyspinel-Sniffer auszuführen, Das Flag -b verwenden, um die Baudrate anzugeben (wenn die Standardeinstellung geändert wurde) und lassen Sie das Flag --no-reset weg.

Wenn Sie Wireshark konfigurieren, um RSSI anzuzeigen, müssen Sie auch die --rssi wenn du das Sniffer Tool ausführst. Um beispielsweise mit einem Gerät unter /dev/ttyACM0 mit RSSI in der Wireshark-Ausgabe bereitgestellt:

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:

Wireshark Capture

Weitere Informationen finden Sie unter Spinel Sniffer Referenz für zum Ausführen des Pyspinel-Sniffers.

Native USB-Verbindung

Bei Verwendung des USB-Ports nRF52840 DK muss das OpenThread-Binärprogramm ot-rcp verwendet werden, um mit USB_trans erstellt werden:

./script/build nrf52840 USB_trans
Flashen Sie nRF52840 DK, schließen Sie es über das USB-Kabel Port und verwenden Sie dann das Flag --no-reset. aber lassen Sie das Flag -b weg, 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 basiert auf nRF52840 mit Wireshark