如何改进创建基于Lua的Wireshark dissector的工作流程

我最近在Lua for Wireshark中创建了一个解剖器来处理我的UDP协议,但这个工作流程很恶心。它包括在我的编辑器中编辑自定义的Lua文件,然后双击示例捕获文件启动Wireshark来查看更改。如果出现错误,Wireshark会通过对话框或树形分析子面板中的红线来通知我。然后我会重新编辑我的自定义Lua文件,关闭Wireshark实例,再次双击我的示例捕获文件。这就像编译C文件,每次只能看到一个编译器错误。

有没有更好(更快)的方法来查看我的更改,而不必一直重新启动Wireshark?

当时,我使用的是启用了Lua的Windows Wireshark 1.2.9。

原文链接 https://stackoverflow.com/questions/3613870

点赞
stackoverflow用户4323
stackoverflow用户4323

你可以编写一个简单的包装函数,让 Wireshark 加载它,然后通过 dofile() 从磁盘加载真正的文件。这可能会“欺骗”Wireshark,始终重新加载你的 Lua 代码,直到你更熟悉它并删除此 hack。

2011-01-01 17:47:46
stackoverflow用户1034483
stackoverflow用户1034483

最好的自动化方式是使用命令行。是的,使用 tshark 而不是加载 gui 东西。

如果您的 lua 脚本名为"proto.lua",并定义了一个名为"MyProto"的协议,使用端口8888,您可以使用以下命令测试您的分析器:

tshark -X lua_script:proto.lua -O MyProto -V -f "port 8888"
  • -V 选项使 tshark 打印所有协议的所有信息。
  • -O 选项将 -V 选项过滤,使其仅显示列表中(CSV)协议的所有信息。
  • -f 选项过滤不符合规则的所有数据包。在这种情况下,筛选任何不来自正确端口的数据包。
2011-11-09 08:30:25
stackoverflow用户1631219
stackoverflow用户1631219

最新的Wireshark版本带有一个原始控制台,可用于运行lua脚本。找到方法是在“工具”下的“Lua”选项中的“评估”。从那里,你应该能够通过运行 dofile() 重新加载你的解析器。你还需要删除以前版本的解析器。

以下是基于TCP的解析器示例。

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函数。

2013-06-06 02:00:58
stackoverflow用户7098036
stackoverflow用户7098036

我已经遇到了同样的问题很长时间了,所以我决定创建一个工具来帮助我简化那个可怕的工作流程。这个工具就是Wirebait。它旨在让您在不使用 Wireshark 的情况下运行 Lua 解析器。

它非常快速和容易安装和使用。您只需加载 Wirebait 模块并在分析器脚本的顶部添加一个五行程序片段即可。如果您使用像 ZeroBrane Studio 这样的 IDE,Wirebait 允许您在编写和调试代码的同时实时运行,不需要 Wireshark。如果您甚至没有 pcap 文件,可以使用表示您想要解析的数据的十六进制字符串。

2018-03-25 16:15:00