Как упоминал Джон Цвинк, вы, вероятно, хотите что-то вроде цепочечного диссектора, которым вы можете управлять довольно просто в Lua или C. Для этого вам, безусловно, нужно реализовать свою логику как диссектора.В Lua что-то вроде этого:
do
--TODO set up your extra "data" field
local tcp_table = DissectorTable.get("tcp.port")
local third_party_dissector tcp_table:get_dissector(PROTO_PORT)
function your_protocol.dissector(tvb, pinfo, tree)
--call the third party dissector
third_party_dissector:call(tvb, pinfo, tree)
--TODO do what you need with the data
end
--take over the port your protocol runs over
tcp_table_add(PROTO_PORT, your_protocol)
end
Держите API под рукой, но имейте в виду, что диссекторы Lua в Wireshark действительно предназначены только для создания прототипов;они менее эффективны, чем эквивалентные диссекторы на основе С, и API имеет тенденцию отставать от нескольких версий от API диссекции на С.