#lua #wireshark #wireshark-dissector
#lua #wireshark #wireshark-диссектор
Вопрос:
Я пишу сценарий lua для анализа пользовательского протокола. Протокол кодирует некоторые данные менее чем за 8 бит. Я хотел бы по-прежнему выделять байты, из которых поступают данные в wireshark.
Если я использую tree:add(Protofield, tvb: range), байты выделяются, поскольку я предполагаю, что байт информации, который нужно выделить, поступает из tvbrange.
Но если я манипулирую данными перед тем, как передать их в дерево, как обычный int, а не как диапазон tvb, байты не выделяются. Дерево не может знать…
Есть ли возможность создать объект диапазона из простых данных?
Или в качестве альтернативы: есть ли способ передать функции tree:add, какие байты выделить?
local detections = 22;
subsubtree:add_le(TimeLag, tvb_sub_buffer(6,4)) -- is highlighting the bytes
subsubtree:add_le(Detections, detections) -- is NOT highlighting the bytes
Спасибо за помощь!
Ответ №1:
Если вы пытаетесь выделить байты, а также манипулировать данными, поступающими из этих байтов, вы можете сделать это, используя что-то вроде следующего:
subsubtree:add_le(TimeLag, tvb_sub_buffer(6,4))
local detections = manipulate_detections(tvb_sub_buffer(10,2):le_uint())
subsubtree:add_le(Detections, tvb_sub_buffer(10,2)):set_text("Detections: " .. detections)
Кроме того, вы можете дополнительно отформатировать строку, если это необходимо, например:
subsubtree:add_le(Detections, tvb_sub_buffer(10,2)):set_text(string.format("Detections: %d", detections))
Обратитесь к разделу 11.7 Руководства разработчика Wireshark для получения дополнительной информации о добавлении информации в дерево разбиения и к разделу 20 — Библиотека строк книги «Программирование в Lua» для получения дополнительной информации string.format()
и друзей.