Как создать объект диапазона tvb из пользовательских данных в скрипте wireshark lua

#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() и друзей.