1
擴大我寫了兩個簡單的Wireshark的Lua解剖的鏈接協議:Wireshark的Lua的解剖:兩者一起
local proto1 = Proto("proto1","First Layer")
local page = ProtoField.uint16("proto1.page", "Page", base.HEX)
proto1.fields = {page}
function proto1.dissector(buffer, pinfo, tree)
pinfo.cols.protocol = proto1.name;
local ptree = tree:add(proto1,buffer(1,5))
ptree:add(page, buffer(1,2))
Dissector.get("proto2"):call(buffer(6, 4):tvb(), pinfo, tree)
end
local proto2 = Proto("proto2","Second Layer")
local len = ProtoField.uint8("proto2.len", "Payload Length")
proto2.fields = {len}
function proto2.dissector(buffer, pinfo, tree)
pinfo.cols.protocol = proto2.name;
local ptree = tree:add(proto2,buffer())
ptree:add(len, buffer(1,2))
end
DissectorTable.get("tcp.port"):add(3456, proto1)
的解剖做的工作,並顯示在協議陸續樹之一。 現在,如果我展開其中一個協議(因此可以看到一個protofield)並單擊其他數據包,那麼樹中的proto1和proto2都會因未知原因而被展開。 如果我現在摺疊其中一個協議並單擊其他數據包,則兩者都摺疊。
任何建議如何避免它?我的協議比這裏顯示的要複雜得多,所以這種擴展很難分析。
你的榜樣工程的確,謝謝。 我確實有這些協議在單獨的文件 - 是否有可能使用你的「假」解決方案,這種情況下沒有混合函數和字段在一個文件中?我嘗試了很多錯誤。 – johnjey
那麼,爲了解決這個問題,你必須將所有的'ProtoField's註冊爲一個'Proto'協議。當然,你也可以在另一個Lua文件中創建'ProtoField'對象,只要其他Lua文件在主設置之前加載'Proto.fields' - 或者使用Lua的'require'函數(如果它們'寫成Lua模塊),或者使用'dofile()'。我通常不喜歡使用'dofile()'來加載Wireshark插件,但加載同一插件的其他Lua文件是合理的。 – hadriel
順便說一句,如果你想稍微等一下,這個錯誤已經在進行中,你應該可以在明天早上從[自動構建站點] [1]下載一個固定版本。直到下一個1.12.x版本纔會正式發佈,但這通常是相當頻繁的。 [1]:https://www.wireshark.org/download/automated/ – hadriel