最好的自动化方法是使用命令行。是的,使用tshark而不是加载gui。
如果您的lua脚本名为“proto.lua”,并且定义了一个名为“MyProto”的协议,该协议使用端口8888,则可以使用以下方式测试您的解析器:
tshark -X lua_script:proto.lua -O MyProto -V -f "port 8888"
dofile()
重新加载您的解析器。您还需要删除先前版本的解析器。local tcp_dissector_table = DissectorTable.get("tcp.port")
tcp_dissector_table:remove(pattern, yourdissector)
yourdissector = nil
dofile("c:/path/to/dissector.lua")
我建议将这段代码放在您的文件中的一个函数中。
现在有一个问题: 如果你的脚本创建了一个Proto对象,似乎你不能再次使用相同的id创建它。 Proto类的构造函数调用C函数proto_register_protocol()
(请参阅epan/wslua/wslua_proto.c
)。 我找不到任何可取消注册协议的lua函数。 实际上,我甚至找不到一个C函数来取消注册它。
你可能可以编写一个简单的包装函数,让Wireshark加载它,并从磁盘上加载真实文件(例如通过dofile()
)。这可能会“欺骗”Wireshark始终重新加载你的Lua代码,直到你更加熟悉它并能够删除此黑客行为。
我一直面临着同样的问题,所以我决定创建一个工具来帮助我简化那个“可怕的工作流”。这个工具就是Wirebait。它旨在让您无需使用Wireshark即可运行Lua解剖器并编写代码。
它非常快速和易于安装和使用。您只需要加载Wirebait模块并在您的解剖器脚本顶部添加五行代码片段即可。然后,如果您使用ZeroBrane Studio这样的IDE,Wirebait允许您实时编写和调试代码,无需Wireshark。如果您甚至没有pcap文件,则可以使用表示要解剖的数据的十六进制字符串。