Wie identifizieren Sie fehlende UDP-Frames in einem benutzerdefinierten Wireshark-Dissector?Wireshark Dissector: Identifizieren fehlender UDP-Frames?
Ich habe einen benutzerdefinierten Dissektor für die CQS feed (reference page) geschrieben. Einer unserer Server lüftet beim Empfang dieses Feeds. Laut Wireshark werden einige UDP-Frames niemals empfangen. Ich weiß, dass die Frames gesendet wurden, weil alle unsere anderen Server lückenlos sind.
Ein CQS-Frame besteht aus mehreren Nachrichten, die jeweils eine eigene Sequenznummer haben. Meine benutzerdefinierte Dissektor bietet die folgenden Daten zu Wireshark:
cqs.frame_gaps - the number of gaps within a UDP frame (always zero)
cqs.frame_first_seq - the first sequence number in a UDP frame
cqs.frame_expected_seq - the first sequence number expected in the next UDP frame
cqs.frame_msg_count - the number of messages in this UDP frame
Und ich bin jeden dieser Werte in benutzerdefinierten Spalten angezeigt wird, wie in diesem Screenshot gezeigt: wireshark screenshot http://img692.imageshack.us/img692/9484/wiresharkcqs.jpg
Ich habe versucht, den Code zu meinem Dissektor hinzufügen, die einfach spart die zuletzt verarbeitete Sequenznummer (als lokale statische) und kennzeichnet Lücken, wenn der Dissektor ein Frame verarbeitet, in dem current_sequence != (previous_sequence + 1)
. Dies hat nicht funktioniert, da der Dissektor in zufälliger Reihenfolge aufgerufen werden kann, je nachdem, wo Sie in der GUI klicken. So könnten Sie Frame 10, dann Frame 15, Frame 11 usw. bearbeiten.
Gibt es irgendeine Möglichkeit für meinen Dissektor, zu wissen, ob der Rahmen, der davor (oder den folgenden Rahmen) kam, fehlt?
Dissektor wird in C.
geschrieben (siehe auch companion post on serverfault.com)
Ich habe das seit langer Zeit nicht berührt, aber ich vermute, dass dies die Antwort ist. Ich habe nicht bemerkt, dass Pakete zweimal seziert wurden. –