Как улучшить рабочий процесс для создания анализатора Wireshark на основе Lua - PullRequest
11 голосов
/ 01 сентября 2010

Я наконец создал Dissector для моего протокола UDP в Lua для Wireshark , но рабочий процесс просто ужасен.Он состоит из редактирования моего пользовательского файла Lua в моем редакторе, а затем двойного щелчка по моему файлу захвата примера, чтобы запустить Wireshark, чтобы увидеть изменения.Если произошла ошибка, Wireshark информирует меня через диалоговые окна или красную линию на вспомогательной панели анализа дерева.Затем я заново редактирую свой пользовательский файл Lua и затем закрываю этот экземпляр Wireshark, а затем снова дважды щелкаю мой файл захвата примера.Это все равно что компилировать файл C и видеть только одну ошибку компилятора за один раз.

Есть ли лучший (более быстрый) способ просмотра моих изменений без необходимости перезапускать Wireshark постоянно?* В то время я использовал Wireshark 1.2.9 для Windows с включенным Lua.

Ответы [ 4 ]

5 голосов
/ 09 ноября 2011

Лучший способ автоматизировать это с помощью командной строки.Да, используйте tshark вместо загрузки графического интерфейса.

Если ваш скрипт lua называется «proto.lua» и он определяет протокол под названием «MyProto», использующий порт 8888, вы можете протестировать диссектор с помощью: * 1003Опция *

tshark -X lua_script:proto.lua -O MyProto -V -f "port 8888"
  • -V заставляет tshark печатать всю информацию обо всех протоколах. Опция
  • -O фильтрует опцию -V, чтобы показать всю информацию только в списке (CSV).) протоколы.
  • -f опция фильтрует все пакеты, которые не соответствуют правилу.В этом случае любой пакет, который не из правого порта.
1 голос
/ 06 июня 2013

Последний выпуск Wireshark поставляется с примитивной консолью для запуска сценария lua.Его можно найти в разделе Инструменты -> Lua -> Оценить.Оттуда вы сможете перезагрузить диссектор, запустив dofile().Вам также придется удалить предыдущую версию вашего диссектора.

Вот пример для диссектора на основе TCP.

local tcp_dissector_table = DissectorTable.get("tcp.port")
tcp_dissector_table:remove(pattern, yourdissector)
yourdissector = nil

dofile("c:/path/to/dissector.lua")

Я рекомендую поместить этот код в функцию внутри вашего файла..

Теперь есть проблема с этим ответом: Если ваш скрипт создал объект Proto, кажется, что вы не можете создать его снова с тем же идентификатором .Конструктор для класса Proto вызывает функцию C proto_register_protocol() (см. epan/wslua/wslua_proto.c).Я не могу найти функцию lua, которая отменяет регистрацию протокола.На самом деле, я даже не могу найти функцию C, чтобы отменить ее регистрацию.

1 голос
/ 01 января 2011

Вы можете написать простую функцию-обертку, которую загружает Wireshark, и просто загрузить реальный файл с диска (например, через dofile()).Вероятно, это может «обмануть» Wireshark, чтобы он всегда перезагружал ваш код Lua, пока вы не освоитесь с ним и не сможете удалить этот хак.

0 голосов
/ 25 марта 2018

Я уже давно сталкиваюсь с той же проблемой, поэтому решил создать инструмент, который помог бы мне упростить этот "ужасный рабочий процесс". Этот инструмент Wirebait . Он предназначен для того, чтобы вы могли запускать диссекторы Lua по мере их написания без Wireshark.

Это очень быстро и легко установить и использовать. Все, что вам нужно сделать, это загрузить модуль Wirebait и добавить фрагмент из пяти строк поверх сценария диссектора. Затем, если вы используете IDE, такую ​​как ZeroBrane Studio, Wirebait позволяет буквально писать и отлаживать ваш код на лету, нет необходимости в wireshark. Если у вас даже нет файла pcap, вы можете использовать шестнадцатеричную строку, представляющую данные, которые вы хотите проанализировать.

...