Несомненно, что с помощью Wireshark можно легко проанализировать протокол, например HTTP, потому что эта программа может извлечь всю необходимую информацию. Однако пользовательские протоколы немного сложнее: для их анализа нам придется вручную извлечь всю необходимую информацию из байтового представления сетевого трафика.
К счастью, можно использовать плагин Wireshark Protocol Dissectors, чтобы добавить в Wireshark анализ дополнительного протокола. Раньше для этого требовалось создание диссектора на языке С, чтобы работать с конкретной версией Wireshark, но современные версии Wireshark поддерживают язык сценариев Lua. Сценарии, которые вы пишете на Lua, также будут работать с инструментом командной строки tshark.
Давайте рассмотрим как разработать простой диссектор на Lua для протокола SuperFunkyChat, который поддерживает открытый чат по протоколу 12345.
Перед разработкой диссектора убедитесь, что ваша копия Wireshark поддерживает Lua, проверив диалоговое окно "О программе" Wireshark в разделе Help → About Wireshark. Если вы запускаете Wireshark от имени привилегированного пользователя в Unix-подобной системе, то обычно поддержка Lua отключена по соображениям безопасности, и вам нужно будет настроить Wireshark для запуска от имени непривилегированного пользователя, чтобы перехватывать и запускать сценарии на Lua. Можно разрабатывать диссекторы практически для любого протокола, с которым будет работать Wireshark, включая TCP и UDP. Гораздо проще разработать диссекторы для протоколов UDP, чем для TCP, потому что каждый перехваченный пакет UDP обычно имеет все, что нужно диссектору.
SuperFunkyChat поддерживает режим UDP, передавая клиенту параметр командной строки --udp при запуске, что довольно удобно. Отправьте этот параметр во время перехвата и увидите пакеты, подобные тем, что показаны на скриншоте. Обратите внимание, что Wireshark по ошибке пытается проанализировать трафик, используя протокол GVSP, как показано в столбце Protocol. Реализация собственного диссектора исправит эту ошибку.
Один из способов загрузить файлы Lua – поместить свои сценарии в каталог %APPDATA%\ireshark\plugins в Windows или каталог ~/.config/wirehark/plugins в Linux и macOS. Также можно загрузить сценарий Lua, указав его в командной строке следующим образом, заменив информацию о пути на расположение сценария:
Wireshark.exe -X lua_script:chat2.lua
Есть и другой способ - это в файле Init.lua проверить значение параметра
disable_lua = false
а в конце того же файла добавить ссылку на сам скрипт:
dofile(DATA_DIR.."chat2.lua")
