2008-10-10 11 views
5

Ich arbeite viel mit der seriellen Kommunikation mit einer Vielzahl von Geräten, und deshalb muss ich oft Hex-Dumps in Protokolldateien analysieren. Momentan mache ich das manuell, indem ich auf die Dumps schaue, die Protokollspezifikationen ansehe und die Ergebnisse aufschreibe. Dies ist jedoch mühsam und fehleranfällig, insbesondere wenn Nachrichten Hunderte von Bytes enthalten und Mischungen von Big-Endian- und Little-Endian-Daten, ASCII, Unicode, Komprimierung, CRCs,. . . .Beliebige allgemeine Dienstprogramme oder Bibliotheken zum Konvertieren von Hex-Dumps in eine für Menschen lesbare Form?

Ich habe ein paar Python-Skripte geschrieben, um die häufigsten Fälle zu unterstützen. Aber es gibt viele Protokolle, mit denen man sich befassen muss, und es macht keinen Sinn, die Zeit damit zu verschwenden, ein benutzerdefiniertes Skript zu schreiben, wenn ich nicht weiß, dass ich viele Dumps analysieren muss.

Was ich möchte ist eine Art von Dienstprogramm, das diese Aktivität automatisieren kann. So zum Beispiel, wenn ich einen Text-hex haben Dump wie folgt aus:

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 eine Ausgabe wie diese bekommen würde:

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.

Gibt es ein solches Dienstprogramm oder eine solche Bibliothek?


Einige gute Antworten sind gekommen, seit ich das Kopfgeld eingerichtet habe. Ich denke Bounties funktionieren!

Wireshark und HexEdit sehen beide vielversprechend aus; Ich schaue mir diese an und werde das Kopfgeld vernünftigerweise an das geben, was mir am besten passt. Aber ich bin offen für andere Ideen.

Antwort

2

Wireshark ist ziemlich gut bei der Eröffnung Netzwerkprotokolle.

+0

Kann Wireshark einen Hex-Dump aus einer Textprotokolldatei analysieren oder nur das, was er selbst erfasst? –

+0

Normalerweise erwartet Wireshark Dinge im PCAP-Format. Es ist jedoch nicht sehr schwierig, Dinge in das PCAP-Dump-Format zu packen (zumindest war es nicht sehr schwierig, einen PCAP-Dump-Leser zu schreiben). – Vatine

0

Ich bin mir ziemlich sicher, dass ich so etwas auf CPAN gesehen habe. Ich könnte mehr vage sein, wenn du willst. :-)

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

+0

Uh-oh, sieht aus wie meine Kopfgeld-Posting hat die negative Bewertung für diese Antwort erhöht. –

+0

Es ging um eins nachdem du das Bounty gepostet hast, aber das brachte mich dazu, das Update zu posten, und dann ging es eins hoch, also bin ich netto positiv auf rep. –

1

Normalerweise verwende ich emacs hexl-Modus, um Binärdateien als "Text-Dump" anzuzeigen. Wenn ich eine spezifischere Ausgabe benötige, mache ich einfach so wie Sie und schreibe einen Parser in C++.

1

In meinem Job entwarfen wir Netzwerk- und serielle Protokolle, um eingebettete Hardware zu steuern. Ich war es auch leid, Dumps falsch zu lesen und Skripte für jedes Protokoll zu schreiben, also schrieb ich eine Bibliothek, um genau das zu tun, was du beschreibst. Sie konnten ihm eine Textdateibeschreibung des Protokolls geben, und es hatte eine GUI, die Kontrollkästchen für das Setzen von einzelnen Bits, Optionsfelder für die Auswahl zwischen den gültigen Kombinationen von Bits und Dropdown-Listen, wenn es viele Möglichkeiten gab. Sie könnten die hexadezimale Ansicht der Daten, die binäre Ansicht jedes Felds oder sogar Punkt und Klick auf die Felder bearbeiten, und alle anderen Ansichten würden aktualisiert. Es hat uns eine Menge Zeit gespart. Es ist ein bisschen schnell und schmutzig, aber ich würde es posten, wenn es nicht meinem Arbeitgeber gehört. Der Punkt ist, es war nicht sehr schwer zu schreiben, und sobald ich von Skripten für jedes Protokoll und zu einem Programm, das eine Beschreibung des Protokolls verstehen konnte, wegging, waren die Dinge großartig. Wir haben die Fehler behoben, die sich auf das falsche Lesen eines Speicherauszugs beziehen, und das Hinzufügen neuer Protokolle wurde trivial.Außerdem ging die textliche Beschreibung des Protokolls direkt in die Entwicklungsspezifikationen ein, so dass die Software-Leute wissen würden, was mit der Hardware zu tun ist. Ich ermutige Sie, einen Riss zu machen.

2

Ich nehme an, Sie brauchen einen guten Hex-Editor. Schauen Sie sich hexedit an. 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 Hex-Daten dagegen dekodieren zu können. Ich nehme an, ein guter Hex-Editor würde dies unterstützen. Überprüfen Sie die kostenpflichtige Version von HexEdit oder google für einen anderen Editor; Es gibt viele zur Verfügung.

1

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

Eine andere Option ist NetPDL.

1

Sie sollten die Tcl binary Befehle für solche Sachen verwenden. Was folgt, ist der Ausgangspunkt für Ihr Beispiel oben. Tcl ist wirklich einfach zu erlernen und Skripte zu schreiben. Wenn Sie serielle Komm-Sachen machen, schulden Sie es sich selbst, zumindest die Grundlagen zu lernen.

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 Bytereihenfolge Sachen haben Sie rund um die Bytes eingeschaltet, aber nicht die Bits, also bin ich nicht wirklich sicher, was Sie dort suchen. Wie auch immer, das wird dich beginnen.

1

Werfen Sie einen Blick auf hexworkshop

ich es seit Jahren verwendet haben Hex-Dumps zu analysieren. Es verfügt über einen Struktur-Viewer, mit dem Sie die Datenstruktur a im C/C++ - Stil definieren und dann die Daten in diesem Format anzeigen können.

Verwandte Themen