Как передать данные таблицы в качестве аргумента в функцию Protofield.string() в диссакторе lua?
Я написал диссектор для протокола в сценарии lua. Диссактор работает нормально. Но я хочу знать одно обновление в файле диссектора.
p_abcd = Proto("abcd", "ABCD")
Я создал таблицу для разных типов сообщений. Ниже таблица -
local message_types = {
[1] = "MAC ID",
[2] = "AP MODEL NAME",
[3] = "AP SERIAL NUMBER",
[4] = "CAUSE",
[5] = "AP STATE",
[6] = "AP SOFTWARE VERSION",
[7] = "AP_IP_ADDRESS"
}
Ниже приведено одно протополе, которое я создал для этого протокола и зарегистрировал как поле.
local attribute_type = ProtoField.string("abcd.message_type", "Attribute Type")
p_abcd.fields = {attribute_type}
tree_attribute:add(attribute_type, data(index, 2), message_types[data(index, 2):int()])
если я применю фильтр в wireshark к любому полю сообщения, он отобразит "abcd.message_type = some_valve" в качестве значения фильтра для всех типов сообщений.
Я хочу отобразить это значение фильтра в соответствии с различными типами сообщений, например, "abcd.mac_id = some_value" для MAC-идентификатора, без создания отдельного протополя для каждого типа сообщений.
Можно ли сделать это с помощью таблицы message_types?
1 ответ
Я не уверен, что понимаю ваш вопрос, но обычно для 2-байтового поля у вас будет что-то вроде этого:
local attribute type = ProtoField.uint16("abcd.message_type", "Attribute Type", base.DEC, message_types, 0x0000, "Optional Message type description")
p_abcd.fields = {attribute_type}
tree_attribute:add(attribute_type, data(index, 2))
(См. ProtoField для получения дополнительной информации.)
Затем, если вы искали тип сообщения, равный MAC-идентификатору, вы применили бы фильтр отображения Wireshark "abcd.message_type eq 1". Если это не то, что вы искали, уточните, пожалуйста, свой вопрос.