2016-07-19 80 views
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。

回答

0

你可以申請Wireshark enhancement bug,要求允許Lua解剖器註冊到多個啓發式表,就像內置的C解剖器可以?