Frage

Ich arbeite viel mit dem seriellen Kommunikation mit einer Vielzahl von Geräten, und so oft ich habe Hex-Dumps in Log-Dateien zu analysieren. Derzeit kann ich dies manuell auf den Deponien suchen, auf der Protokoll-Spezifikation suchen, und die Ergebnisse aufzuschreiben. Dies ist jedoch mühsam und fehleranfällig, vor allem whem Nachrichten Hunderte von Bytes und enthalten Mischungen von Big-Endian und Little-Endian-Daten enthalten, ASCII, Unicode, Kompression, CRCs. . . .

Ich habe einigen Python-Skripte geschrieben mit den häufigeren Fällen zu unterstützen. Aber es gibt viele Protokolle zu behandeln, und es macht keinen Sinn, die Zeit zu verbringen ein eigenes Skript zu schreiben, wenn ich weiß, ich werde eine Menge von Deponien müssen zu analysieren.

Was ich möchte, ist eine Art von Programm, das diese Aktivität zu automatisieren. So zum Beispiel, wenn ich eine Text hex wie diese Dump haben:

7e ff 00 7b  00 13 86 04
00 41 42 43  44 56 ef 7e

und eine Art von Beschreibung des Nachrichtenformat wie folgt aus:

# Field         Size        Byte Order  Output Format
Flag            1                       hex
Address         1                       hex
Control         1                       hex
DataType        1                       decimal
LineIndex       1                       decimal
PollAddress     2           msb         hex
DataSize        2           lsb         decimal
Data            (DataSize)              ascii
CRC             2           lsb         hex
Flag            1                       hex

Ich würde Ausgabe wie diese:

Flag            0x7e
Address         0xff
Control         0x00
DataType        123
LineIndex       0
PollAddress     0x1386
DataSize        4
Data            "ABCD"
CRC             0xef56
Flag            0x7e

Hardware-basierte Protokoll-Analysatoren haben oft ausgefallene Funktionen für diese Art der Sache zu tun, aber ich muß mit Textprotokolldateien arbeiten.

Ist eine solche Dienstprogramm oder Bibliothek vorhanden?


Einige gute Antworten haben kommen, da ich die Prämie einzurichten. Ich denke, Bounties arbeiten!

Wireshark und HexEdit schauen beide vielversprechend; Ich werde einen Blick auf diejenigen nehmen, und vergibt proabably die Prämie zu je nachdem, welche meinen Bedürfnissen entspricht. Aber ich bin immer noch offen für andere Ideen.

War es hilfreich?

Lösung

Wireshark ist recht gut beim Aufmachen Netzwerkprotokollen.

Andere Tipps

Ich nehme an, Sie einen guten Hex-Editor benötigen. Hier finden Sie aktuelle hexedit . Ich habe die kostenlose Version in der Vergangenheit verwendet, und es ist gut, aber ich weiß nicht, ob es bietet, was Sie suchen. Im Grunde wollen Sie in der Lage sein, eine Struktur zu definieren und dann in der Lage sein, um Hex-Daten dagegen zu dekodieren. Ich nehme ein guter Hex-Editor dies unterstützen würde. Überprüfen Sie die kostenpflichtige Version von HexEdit oder Google für einen anderen Editor; es gibt viele zur Verfügung.

Normalerweise verwende ich Emacs HexL-Modus Binär-Dateien als „text-dump“ anzuzeigen. Wenn ich mehr spezifische Leistung benötigen, ich, wie Sie gerade tun und einen Parser in C ++ schreiben.

In meiner Arbeit, die wir entwerfen Netzwerk und serielle Protokolle auf Embedded-Hardware zu steuern. Ich habe auch müde von Lesung falsch Dumps, und Schreiben von Skripts für jedes Protokoll, also schrieb ich genau eine Bibliothek zu tun, was Sie beschreiben. Man könnte ihm eine Textdatei Beschreibung des Protokolls geben, und es hatte eine gui Unterstützung Kontrollkästchen für einzelne Bits einstellen, Radio-Buttons für zwischen den gültigen Kombinationen von Bits zu wählen und Dropdown-Listen, wenn es eine Menge Möglichkeiten war. Sie könnten die Hex Ansicht der Daten, die binäre Ansicht jedes Feld oder sogar darauf und klicken Sie auf die Felder bearbeiten, und alle anderen Ansichten aktualisiert werden würde. Es ersparte uns eine Menge Zeit. Es ist ein wenig schnell und schmutzig, aber ich würde es schreiben, wenn es nicht von meinem Arbeitgeber gehört. Der Punkt ist, es war nicht sehr schwer zu schreiben, und wenn ich von Skripten für jedes Protokoll ging weg und zu einem Programm, das eine Beschreibung des Protokolls verstehen konnte, die Dinge waren großartig. Wir hielten Schraube ups im Zusammenhang einen Dump zu Verlesen, und das Hinzufügen neuer Protokolle wurde trivial. Plus die textuelle Beschreibung des Protokolls ging direkt in die Entwicklungsdaten, so dass die Software Jungs würden wissen, was mit der Hardware zu tun. Ich ermutige Sie, um es einen Riss zu nehmen.

Ein möglicher Ausgangspunkt wäre libPDL , eine C ++ Bibliothek.

Eine andere Möglichkeit kann sein, NetPDL .

sollten Sie verwenden die Tcl binär für Sachen Befehle so was. Was folgt, ist der Ausgangspunkt für Ihr Beispiel oben. Tcl ist wirklich einfach zu erlernen und Skripte zu schreiben. Wenn Sie serielle comm Sachen tun Sie schulden es sich selbst, zumindest die Grundlagen zu erlernen.

bash$ tclsh
% binary scan [binary format H* 7eff007b00138604004142434456ef7e] \
  H2H2H2ccH4sa4h4H2 \
  flag1 addr ctl datatype lineidx polladdr datasize data crc flag2
10
% puts "$flag1 $addr $ctl $datatype $lineidx \
  $polladdr $datasize $data $crc $flag2"
7e ff 00 123 0 1386 4 ABCD 65fe 7e

Wenn Sie Ihr Byte-Reihenfolge Zeug haben Sie rund um die Bytes eingeschaltet, aber nicht die Bits, also bin ich nicht wirklich sicher, was Sie dort suchen. Wie auch immer, dies wird Ihnen den Start.

Hier finden Sie aktuelle hexworkshop

Ich habe es seit Jahren mit Hex-Dumps zu analysieren. Es hat eine Struktur-Viewer, die Sie definieren Datenstruktur eine in C / C ++ Stil und zeigt dann die Daten in diesem Format können.

WinHex unterstützt die Anzeige / Bearbeitung benutzerdefinierte Satzformate. Es gibt einige Beispiele unter http://www.x-ways.net/winhex/templates/index.html

Ich bin mir ziemlich sicher, dass ich sah etwas wie die auf CPAN. Ich könnte mehr vage sein, wenn Sie mögen. : -)

Update: Es ist nicht genau das, was Sie wollen, aber einen Blick auf Parse :: Binary :: FixedFormat

Es gibt ein BSD-Befehlszeilenprogramm hexdump aufgerufen, dies durch die Verwendung von Formatstrings tut (die in einer externen Datei sein können). Siehe https://www.suse.com/communities/blog/making- Sinnes hexdump / für ein Intro und zB https://www.freebsd.org/cgi/man.cgi? query = hexdump & Sektion = 1 für die manuelle Seite (mit besonderem Augenmerk auf die -e und -f Optionen und den Abschnitt mit dem Titel Formate ).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top