0
我正在爲可以通過TCP和UDP發送的協議編寫定製的Lua解析器。按照README.heuristic文件,這可以使用下面的代碼來完成:wireshark開發:在Lua中註冊具有多種協議的啓發式函數
/* register as heuristic dissector for both TCP and UDP */
heur_dissector_add("tcp", dissect_PROTOABBREV_heur_tcp, "PROTOABBREV over TCP",
"PROTOABBREV_tcp", proto_PROTOABBREV, HEURISTIC_ENABLE);
heur_dissector_add("udp", dissect_PROTOABBREV_heur_udp, "PROTOABBREV over UDP",
"PROTOABBREV_udp", proto_PROTOABBREV, HEURISTIC_ENABLE);
我已經成功地實現了這個爲我們解剖用C/C++。然而,proto:register_heuristic(listname,func)的Lua實現只允許爲每個協議對象註冊一個啓發式函數,即使我使用了兩個獨特的啓發式列表名稱。
呼叫至:
my_proto:register_heuristic("udp", my_heur_func)
my_proto:register_heuristic("tcp", my_heur_func)
導致Wireshark的顯示錯誤my_proto已具有一定的啓發函數註冊。檢查源代碼,看起來Lua函數背後的C代碼檢查了proto名稱而不是啓發式列表名稱。因此,我只能將我的啓發式功能註冊爲單個啓發式列表名稱。
這是一個Lua限制還是有另一種方法,我可以註冊我的啓發式功能與多個啓發式列表名稱?除了另一個解決方案,似乎我可能不得不創建兩個獨立的Lua解析器。一個用於TCP,一個用於UDP。