Hallo zusammen,
um in einem ZigBee-Netzwerk nach Fehlern zu suchen verwende ich
Wireshark und uracoli sniffer (http://www.nongnu.org/uracoli/).
Wenn in dem Netzwerk wenig Verkehr ist, funktioniert dies auch eine Zeit
lang sehr gut. Nach einiger Zeit bzw. bei einem höheren Datenaufkommen
bricht das Python-Skript aber mit einer Fehlermeldung ab.
Genau diese Netzwerkverkehrsspitzen möchte ich aber gern aufzeichnen.
Fehlermeldung:
1 | Exception in thread Thread-1:
|
2 | Traceback (most recent call last):
|
3 | File "/usr/lib/python2.6/threading.py", line 525, in __bootstrap_inner
|
4 | self.run()
|
5 | File "/usr/lib/python2.6/threading.py", line 477, in run
|
6 | self.__target(*self.__args, **self.__kwargs)
|
7 | File "/home/carsten/Entwicklung/SnifferExt/PacketCapture_ext/ieee802154_io.py", line 240, in __rx__
|
8 | self.state,frm = self.packetizer(frm)
|
9 | File "/home/carsten/Entwicklung/SnifferExt/PacketCapture_ext/ieee802154_io.py", line 322, in packetizer
|
10 | ticks = struct.unpack('LL',ticks)
|
11 | error: unpack requires a string argument of length 8
|
Daraufhin habe ich in die Funktion "packetizer" in der Datei
ieee802154_io.py etwas ergänzt um zu verhindern, dass "unpack" mit einem
zu kurzen String aufgerufen wird:
1 | (...)
|
2 | if (pktlen) < 13:
|
3 | # length is to short
|
4 | state = self.UNSYNC
|
5 | break
|
6 | if frm[pktlen+2] != '\x04':
|
7 | (...)
|
Die 13 habe ich gewählt, da ich in die Nachrichten vom ZigBee-Modul
(uracoli, sniffer.c) 5 zusätzliche Bytes vor dem EOT eingefügt habe. Ein
Paket besteht also immer aus dem Timestamp und mindestens diesen fünf
Bytes.
Diese Variante funktionierte bei geringem Datenaufkommen auch. Bei hohem
Datenaufkommen bleibt die Protokollierung in Wireshark aber stehen (das
Skript läuft aber weiter).
Nach meinen bisherigen Untersuchungen sieht es so aus, dass sich das
Skript gelegentlich neu synchronisieren muss. Dies scheint dann
irgendwann nicht mehr zu gelingen.
Ich kenne mich leider nicht mit Python aus, deshalb gestaltet sich die
Fehlersuche etwas schwierig.
Ich hoffe, dass mir jemand einen Tipp geben kann.
Bei den verwendeten ZigBee-Modulen handelt es sich um die 900
MHz-Version von Meshnetics. Deshalb habe ich das uracoli-Projekt für den
mnb900 kompiliert.
Vielen Dank im Voraus!