Как передать данные таблицы в качестве аргумента в функцию 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". Если это не то, что вы искали, уточните, пожалуйста, свой вопрос.

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