11

我终于在Lua for Wireshark中为我的 UDP 协议创建了一个Dissector,但工作流程实在是太可怕了。它包括在我的编辑器中编辑我的自定义 Lua 文件,然后双击我的示例捕获文件以启动 Wireshark 以查看更改。如果出现错误,Wireshark 会通过对话框或树分析子窗格中的红线通知我。然后我重新编辑我的自定义 Lua 文件,然后关闭该 Wireshark 实例,然后再次双击我的示例捕获文件。这就像编译一个 C 文件并且一次只看到一个编译器错误。

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

当时,我使用 Wireshark 1.2.9 for Windows 并启用了 Lua。

4

4 回答 4

5

自动执行此操作的最佳方法是使用命令行。是的,使用 tshark 而不是加载 gui thingy。

如果您的 lua 脚本名为“proto.lua”并且它定义了一个使用端口 8888 的名为“MyProto”的协议,您可以使用以下方法测试您的解剖器:

tshark -X lua_script:proto.lua -O MyProto -V -f "port 8888"
  • -V 选项使 tshark 打印所有协议的所有信息。
  • -O 选项过滤 -V 选项,使其仅显示列出的 (CSV) 协议上的所有信息。
  • -f 选项过滤所有不符合规则的数据包。在这种情况下,任何不是来自正确端口的数据包。
于 2011-11-09T08:30:25.630 回答
2

最新的 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-06T02:00:58.160 回答
1

您也许可以编写一个 Wireshark 加载的简单包装函数,并让它从磁盘加载真实文件(例如 via dofile())。这可能会“欺骗” Wireshark 总是重新加载你的 Lua 代码,直到你对它更满意并且可以删除这个 hack。

于 2011-01-01T17:47:46.153 回答
0

我已经面临同样的问题很长一段时间了,所以我决定创建一个工具来帮助我简化“可怕的工作流程”。有问题的工具是Wirebait。它旨在让您在编写 Lua 解析器时运行它们而无需 Wireshark。

它非常快速且易于安装和使用。您所要做的就是加载 Wirebait 模块并在解析器脚本的顶部添加一个五行代码片段。然后,如果您使用诸如 ZeroBrane Studio 之类的 IDE,Wirebait 允许您即时编写和调试代码,而无需使用 Wireshark。如果您甚至没有 pcap 文件,您可以使用一个十六进制字符串来表示您要剖析的数据。

于 2018-03-25T16:15:00.550 回答