Как создать подмассив Protofield для Lua Wireshark Dissector
Учитывая следующий пример:
local f= mycoolprotocol.fields
f.Length = ProtoField.uint32("MCP.Length","Length",base.DEC)
f.MsgType = ProtoField.uint16("MCP.MsgType","MsgType",base.DEC)
Я объявил 2 Protofields. Но представьте, что у меня есть повторяющаяся группа или массив элементов:
И тело сообщения выглядит так:
struct person
{
int16 age;
string name;
}
person[] p = new person[2];
В идеале я хотел бы создать поддерево в Wireshark для этой группы
+ Persons
+ Person1
name
age
+ Person2
name
age
Проблема в том, что я не знаю, как структурировать это в Lua. Это объявляет 2 протополя:
f.name = Protofield.string("MCP.name","name","Text")
f.age = ProtoField.uint16("MCP.age","age",base.DEC)
Но я бы хотел вместо этого создать динамический массив группы, чтобы я мог сделать:
subtree:add_le( f[0].name, buffer(x,y))
Итак, есть ли Protofield.ProtoFieldArray
? Является ли это возможным? Любые другие идеи приветствуются.
Благодарю.
Также в качестве ссылки: http://ask.wireshark.org/questions/28038/how-to-create-a-protofield-sub-array-in-lua
1 ответ
Оказывается, я могу использовать одни и те же поля для построения дерева.
Итак, в псевдокоде:
begin loop
subtree= mainsubtree:add(a,buffer())
subtree:add(f.name, buffer(x,y))
subtree:add(f.age, buffer(x+name.length,y))
end
Так f.name
f.age
не перезаписывается более новым значением. Я думаю, это просто заполнитель для ProtoField