如何改进创建基于Lua的Wireshark解析器的工作流程

11

我终于成功地在 Wireshark 中使用 Lua 编写了我的UDP协议的解析器,但工作流程实在是可怕。它需要在编辑器中编辑自定义的Lua文件,然后双击我的示例捕获文件打开Wireshark以查看更改。如果出现错误,Wireshark会通过对话框或树形分析子窗格中的红线告知我。然后我需要重新编辑自定义的Lua文件,关闭该Wireshark实例,再次双击我的示例捕获文件。这就像编译C文件一样,每次只能看到一个编译器错误。

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

当时,我使用的是启用了Lua功能的Windows Wireshark 1.2.9版本。


1
有没有一些有用的Lua解析器教程和类文档? - harper
@harper 类和函数的文档位于 https://www.wireshark.org/docs/wsdg_html_chunked/wsluarm_modules.html。 - Lekensteyn
@Lekensteyn 是的,有一个类和函数列表。但是要求提供工作流程而不是列表。 - harper
@Lekensteyn,你又错过了,抱歉。这不是要求提供(甚至简单的)示例,而是要求改进工作流程。 - harper
@Lekensteyn,如果你想要面向未来的读者,为什么要写@harper? - harper
显示剩余2条评论
4个回答

6

最好的自动化方法是使用命令行。是的,使用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 选项过滤不符合规则的所有数据包。在本例中,任何不来自正确端口的数据包都将被过滤。

2
最新的Wireshark版本提供了一个基本的控制台用于运行Lua脚本。您可以在“工具” -> “Lua” -> “Evaluate”下找到它。从那里,您应该能够通过运行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函数来取消注册它。


事实上,我甚至找不到一个取消注册它的C函数。没有Lua,就没有在启动时间之外的任何时候注册解剖器(或其他插件)的机制,因此没有必要进行取消注册。有了Lua,可能有必要添加它(并为Lua添加一些IDE功能 - 我认为有人用Lua编写了一个IDE,可以用于此)。 - user862787

1

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


0

我一直面临着同样的问题,所以我决定创建一个工具来帮助我简化那个“可怕的工作流”。这个工具就是Wirebait。它旨在让您无需使用Wireshark即可运行Lua解剖器并编写代码。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接