Как создать подмассив 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.namef.age не перезаписывается более новым значением. Я думаю, это просто заполнитель для ProtoField

Другие вопросы по тегам