Введение
В этом лабораторном занятии вы узнаете, как расширить возможности анализа пакетов в Wireshark с помощью скриптинга на Lua. Вы научитесь загружать пользовательские скрипты с использованием параметров командной строки и передавать аргументы для расширения функциональности.
В упражнениях вас будут сопровождать по созданию скриптов на Lua, тестированию их с помощью команды tshark в Wireshark и проверке вывода. Вы научитесь выполнять скрипты с пустыми захватами и интерпретировать подробную информацию о пакетах.
Загрузите скрипт с помощью -X lua_script:script.lua
На этом этапе вы узнаете, как загрузить скрипт на Lua в Wireshark с использованием опции -X. Lua - это легковесный скриптовый язык, который хорошо интегрируется с Wireshark, позволяя расширять его функциональность для пользовательского анализа пакетов без изменения основного программного кода.
Сначала создадим простой скрипт на Lua в каталоге по умолчанию. Этот скрипт будет служить нашим базовым тестовым примером для проверки того, что Wireshark может успешно загрузить и выполнить код на Lua:
Откройте терминал и убедитесь, что вы находитесь в каталоге
~/project. Именно здесь мы создадим и сохраним наш скрипт на Lua:cd ~/projectСоздайте новый файл скрипта на Lua с именем
script.luaс помощью редактора nano. Мы используем nano, так как он прост в использовании и доступен в большинстве Linux-окружений:nano script.luaДобавьте следующий базовый код на Lua для вывода сообщения при загрузке. Это демонстрирует самую основную операцию - проверку выполнения скрипта:
-- Simple Wireshark Lua script print("Wireshark Lua script loaded successfully!")Сохраните файл (Ctrl+O, Enter) и выйдите из nano (Ctrl+X). Теперь скрипт готов к загрузке в Wireshark.
Теперь загрузим этот скрипт с помощью командной строки Wireshark. Мы будем использовать специальную комбинацию параметров для тестирования скрипта без обработки реального сетевого трафика:
wireshark -X lua_script:script.lua -r /dev/null -k
Разберем, что делает каждая часть этой команды:
-X lua_script:script.luaсообщает Wireshark загрузить наш файл скрипта на Lua-r /dev/nullуказывает на пустой файл захвата (мы просто тестируем загрузку скрипта, а не анализируем пакеты)-kзапускает захват сразу же, не ожидая ввода пользователя
При выполнении этой команды вы должны увидеть сообщение "Wireshark Lua script loaded successfully!" в выводе терминала. Это подтверждает, что Wireshark успешно нашел, загрузил и выполнил ваш скрипт на Lua. Если вы не видите это сообщение, убедитесь, что файл скрипта существует в правильном месте и не содержит синтаксических ошибок.
Передайте аргумент с помощью -X lua_script1:arg1
На этом этапе вы узнаете, как передавать аргументы в скрипт на Lua в Wireshark с использованием опции -X lua_script1:. Этот метод полезен, когда вы хотите сделать свои скрипты более гибкими, принимая разные входные данные без изменения самого скрипта каждый раз.
Сначала разберем, как работает передача аргументов в среде Lua в Wireshark. Опция -X lua_script1: позволяет отправить строковое значение в ваш скрипт, которое затем можно получить с помощью функции get_string(). Это похоже на то, как работают аргументы командной строки в других языках программирования.
Изменим наш существующий скрипт на Lua, чтобы он принимал и обрабатывал аргумент:
Откройте файл
script.luaиз предыдущего шага:nano ~/project/script.luaЗамените содержимое следующим кодом, который принимает и отображает аргумент:
-- Lua script with argument handling local arg1 = get_string("lua_script1") print("Received argument: " .. (arg1 or "no argument provided"))Функция
get_string("lua_script1")извлекает аргумент, переданный с помощью-X lua_script1:. Частьor "no argument provided"предоставляет сообщение по умолчанию, если аргумент не был передан.Сохраните файл (Ctrl+O, Enter) и выйдите из nano (Ctrl+X).
Теперь выполним скрипт с аргументом:
wireshark -X lua_script:script.lua -X lua_script1:test123 -r /dev/null -k
Разберем эту команду:
-X lua_script:script.luaзагружает наш файл скрипта на Lua-X lua_script1:test123передает "test123" в качестве аргумента в скрипт-r /dev/nullуказывает на пустой файл захвата (так как мы просто тестируем скрипт)-kзапускает захват сразу же, не ожидая ввода пользователя
Вы должны увидеть вывод, похожий на следующий:
Received argument: test123
Чтобы убедиться, что скрипт работает с разными входными данными, попробуйте запустить его с другим значением:
wireshark -X lua_script:script.lua -X lua_script1:another_value -r /dev/null -k
Это демонстрирует, как вы можете повторно использовать один и тот же скрипт с разными аргументами, делая ваш анализ более динамичным и адаптивным к разным сценариям.
Обработайте файл с помощью -r capture.pcap
На этом этапе вы узнаете, как обработать предварительно записанный файл сетевого захвата с использованием командной строки Wireshark - Tshark и опции -r. Это полезно, когда вы хотите проанализировать сохраненный сетевой трафик, а не захватывать пакеты в режиме реального времени.
Сначала нам нужен пример файла захвата пакетов для работы. Файлы PCAP содержат реальные данные сетевого трафика, которые мы можем проанализировать. Скачаем стандартный пример HTTP-трафика:
Скачайте пример файла pcap в ваш проектный каталог:
wget https://wiki.wireshark.org/SampleCaptures/http.cap -O ~/project/capture.pcapПроверьте, что файл был скачан правильно, проверив его размер и местоположение:
ls -lh ~/project/capture.pcap
Теперь изменим наш скрипт на Lua для анализа этого файла захвата. Скрипт подсчитает все пакеты в файле и сообщит общее количество. Вот как его обновить:
Откройте скрипт для редактирования:
nano ~/project/script.luaОбновите содержимое с помощью этой логики подсчета пакетов:
-- Packet counter script local arg1 = get_string("lua_script1") or "default" local packet_count = 0 -- Called for each packet function tap.packet(pinfo,tvb) packet_count = packet_count + 1 end -- Called after processing all packets function tap.draw() print("Argument received: " .. arg1) print("Total packets processed: " .. packet_count) end -- Register the tap tap = Listener.new()Сохраните файл (Ctrl+O, Enter) и выйдите из nano (Ctrl+X).
Теперь запустим наш скрипт на файле захвата. Эта команда сообщает Tshark:
- Использовать наш скрипт на Lua (
-X lua_script) - Передать аргумент в скрипт (
-X lua_script1) - Обработать наш скачанный файл (
-r) - Работать тихо, без графического интерфейса (
-q)
wireshark -X lua_script:script.lua -X lua_script1:analysis -r ~/project/capture.pcap -q
После обработки вы должны увидеть вывод, показывающий:
- Аргумент, который мы передали в скрипт
- Общее количество подсчитанных пакетов
Пример вывода:
Argument received: analysis
Total packets processed: 83
Проверьте пользовательский вывод с помощью -V
На этом этапе мы рассмотрим, как проверить вывод вашего скрипта на Lua с использованием опции -V (подробный вывод) в Wireshark. Это особенно полезно, когда вам нужно увидеть детальные результаты анализа из вашего пользовательского скрипта вместе со стандартной информацией о пакетах.
Сначала улучшим наш скрипт на Lua, чтобы он предоставлял более осмысленную статистику. Изменим его так, чтобы он отслеживал разные типы протоколов:
Откройте скрипт для редактирования в nano:
nano ~/project/script.luaОбновите скрипт с помощью этого расширенного варианта, который подсчитывает пакеты HTTP и TCP:
-- Enhanced packet analyzer local arg1 = get_string("lua_script1") or "default" local stats = { total = 0, http = 0, tcp = 0 } function tap.packet(pinfo,tvb) stats.total = stats.total + 1 if pinfo.visited then return end if pinfo.protocols:find("http") then stats.http = stats.http + 1 end if pinfo.protocols:find("tcp") then stats.tcp = stats.tcp + 1 end end function tap.draw() print("=== Analysis Report ===") print("Argument received: " .. arg1) print("Total packets: " .. stats.total) print("HTTP packets: " .. stats.http) print("TCP packets: " .. stats.tcp) print("======================") end tap = Listener.new()Сохраните файл (Ctrl+O, Enter) и выйдите из nano (Ctrl+X).
Теперь выполним наш скрипт с включенным подробным выводом. Флаг -V сообщает Wireshark отобразить всю доступную информацию, включая вывод нашего пользовательского скрипта:
wireshark -X lua_script:script.lua -X lua_script1:final_run -r ~/project/capture.pcap -q -V
Вы должны увидеть вывод, похожий на следующий, показывающий как детали пакетов, так и анализ вашего скрипта:
=== Analysis Report ===
Argument received: final_run
Total packets: 83
HTTP packets: 10
TCP packets: 83
======================
Для сохранения этого вывода для будущего использования перенаправьте его в файл:
wireshark -X lua_script:script.lua -X lua_script1:final_run -r ~/project/capture.pcap -q -V > ~/project/analysis_output.txt
В конце, проверьте сохраненный вывод, просмотрев содержимое файла:
cat ~/project/analysis_output.txt
Резюме
В этом практическом занятии вы узнали, как расширять функциональность Wireshark с помощью скриптов на Lua с использованием командной строки. Основные этапы включали загрузку скриптов на Lua с помощью опции -X lua_script:script.lua и их тестирование с использованием командной строки Wireshark.
Кроме того, вы изучили передачу аргументов в скрипты на Lua с помощью -X lua_script1:arg1, показав, как создавать гибкие скрипты, которые принимают внешние параметры. Этот метод повышает эффективность анализа пакетов в Wireshark за счет настраиваемых расширений на Lua.


