我正在为可以通过TCP和UDP发送的协议编写自定义Lua剖析器。根据README.heuristic文件,可以使用以下代码完成此操作:
/* 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代码检查原型名称而不是启发式列表名称。因此,我只能为单个启发式列表名称注册我的启发式函数。
这是一个Lua限制还是有另一种方法可以用多个启发式列表名称注册我的启发式函数?没有其他解决方案,似乎我可能需要创建两个单独的Lua解剖器。一个用于TCP,一个用于UDP。