Какие-нибудь универсальные утилиты или библиотеки для преобразования шестнадцатеричных дампов в удобочитаемую форму?

StackOverflow https://stackoverflow.com/questions/191652

Вопрос

Я много работаю с последовательной связью с различными устройствами, и поэтому мне часто приходится анализировать шестнадцатеричные дампы в файлах журналов.В настоящее время я делаю это вручную, просматривая дампы, спецификацию протокола и записывая результаты.Однако это утомительно и чревато ошибками, особенно когда сообщения содержат сотни байт и содержат смеси данных в формате big-endian и little-endian, ASCII, Unicode, сжатие, CRCS, ....

Я написал несколько скриптов на Python, чтобы помочь в более распространенных случаях.Но есть множество протоколов, с которыми нужно иметь дело, и нет смысла тратить время на написание пользовательского скрипта, если я не знаю, что у меня будет много дампов для анализа.

Чего бы я хотел, так это какой-нибудь утилиты, которая могла бы автоматизировать это действие.Так, например, если у меня есть текстовый шестнадцатеричный дамп, подобный этому:

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

и какое-то описание формата сообщения, например, это:

# 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

Я бы получил такой результат:

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

Аппаратные анализаторы протоколов часто обладают необычными функциями для выполнения подобных задач, но мне нужно работать с текстовыми файлами журналов.

Существует ли какая-либо такая утилита или библиотека?


С тех пор как я установил награду, появилось несколько хороших ответов.Я думаю, щедроты работают!

Wireshark и HexEdit выглядят многообещающе;Я взгляну на них и, вероятно, назначу награду тому, кто удовлетворит моим потребностям.Но я по-прежнему открыт для других идей.

Это было полезно?

Решение

Wireshark неплохо умеет открывать сетевые протоколы.

Другие советы

Полагаю, вам нужен хороший шестнадцатеричный редактор. Ознакомьтесь с hexedit . Я использовал бесплатную версию в прошлом, и это хорошо, но я не знаю, предлагает ли она то, что вы ищете. По сути, вы хотите иметь возможность определить структуру и затем иметь возможность декодировать шестнадцатеричные данные в нее. Я полагаю, хороший редактор hex поддержит это. Проверьте платную версию HexEdit или Google для другого редактора; Есть много доступных.

Обычно я использую emacs hexl-mode для просмотра двоичных файлов в виде " text-dump " ;. Когда мне нужен более конкретный вывод, я просто делаю как вы и пишу парсер на C ++.

В моей работе мы разрабатывали сетевые и последовательные протоколы для управления встроенным оборудованием. Я также устал от неправильного чтения дампов и написания скриптов для каждого протокола, поэтому я написал библиотеку, которая будет делать именно то, что вы описываете. Вы можете дать ему описание протокола в текстовом файле, и в нем есть графический интерфейс для поддержки отдельных битов, переключатели для выбора между допустимыми комбинациями битов и раскрывающиеся списки, когда вариантов было много. Вы можете отредактировать шестнадцатеричное представление данных, двоичное представление каждого поля или даже указать и щелкнуть поля, и все остальные представления обновятся. Это сэкономило нам кучу времени. Это немного быстро и грязно, но я бы опубликовал его, если бы он не принадлежал моему работодателю. Дело в том, что писать было не очень сложно, и как только я отказался от сценариев для каждого протокола и от одной программы, которая могла бы понять описание протокола, все было замечательно. Мы прекратили провалы, связанные с неправильным чтением дампа, и добавление новых протоколов стало тривиальным. Кроме того, текстовое описание протокола вошло прямо в спецификации разработки, чтобы разработчики программного обеспечения знали, что делать с оборудованием. Я призываю вас попробовать.

Одной из возможных отправных точек будет libPDL , библиотека C ++.

Другим вариантом может быть NetPDL .

Вы должны использовать двоичные команды Tcl для вещей как это. Далее следует отправная точка для вашего примера выше. Tcl действительно легок в изучении и написании сценариев. Если вы занимаетесь последовательной связью, вы обязаны изучить хотя бы основы.

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

Когда вы делали свои байты, вы переключали байты, но не биты, поэтому я не совсем уверен, что вы там искали. В любом случае, это поможет вам начать.

Просмотрите hexworkshop

Я использую его годами для анализа дампов в шестнадцатеричном формате. Он имеет просмотрщик структуры, который позволяет вам определять структуру данных a в стиле C / C ++, а затем отображать данные в этом формате.

WinHex поддерживает отображение / редактирование пользовательских форматов записей. Некоторые примеры можно найти на http://www.x-ways.net/winhex/templates/index.html

Я почти уверен, что видел что-то подобное на CPAN. Я мог бы быть более расплывчатым, если хотите. : -)

Обновление . Это не совсем то, что вам нужно, но посмотрите на Parse :: Binary :: FixedFormat

Существует утилита командной строки BSD, которая называется hexdump это делается с помощью строк формата (которые могут находиться во внешнем файле).Видишь https://www.suse.com/communities/blog/making-sense-hexdump/ для вступления и, например, https://www.freebsd.org/cgi/man.cgi ?запрос=шестнадцатеричный дамп и раздел=1 для страницы руководства (с особым вниманием к -e и -f параметры и раздел, озаглавленный Форматы).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top