Alle Allgemeine Utilities oder Bibliotheken für Converting Hexdumps in lesbarer Form?
-
08-07-2019 - |
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.
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.
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 ).