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

Workflow 如何改进创建基于Lua的Wireshark解析器的工作流,workflow,lua,restart,wireshark,read-eval-print-loop,Workflow,Lua,Restart,Wireshark,Read Eval Print Loop,我终于在中为我的UDP协议创建了一个应用程序,但是工作流程非常糟糕。它包括在编辑器中编辑自定义Lua文件,然后双击示例捕获文件以启动Wireshark以查看更改。如果出现错误,Wireshark会通过对话框或树分析子窗格中的红线通知我。然后我重新编辑我的自定义Lua文件,然后关闭Wireshark实例,然后再次双击我的示例捕获文件。这就像编译一个C文件,一次只看到一个编译器错误 有没有更好(更快)的方式查看我的更改,而不必一直重新启动Wireshark 当时,我正在为启用Lua的Windows使

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

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


当时,我正在为启用Lua的Windows使用Wireshark 1.2.9。

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

实现自动化的最佳方法是使用命令行。是的,使用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选项过滤所有不符合规则的数据包。在这种情况下,任何不是来自正确端口的数据包

最新的Wireshark版本附带了一个用于运行lua脚本的基本控制台。它可以在工具->Lua->评估下找到。从那里,您应该可以通过运行
dofile()
来重新加载解析器。您还必须删除以前版本的剖析器

local tcp_dissector_table = DissectorTable.get("tcp.port")
tcp_dissector_table:remove(pattern, yourdissector)
yourdissector = nil

dofile("c:/path/to/dissector.lua")
下面是一个基于TCP的解析器的示例

local tcp_dissector_table = DissectorTable.get("tcp.port")
tcp_dissector_table:remove(pattern, yourdissector)
yourdissector = nil

dofile("c:/path/to/dissector.lua")
我建议将此代码放在文件中的函数中


现在这个答案有一个问题:如果您的脚本创建了一个原型对象,那么您似乎无法使用相同的id再次创建它。Proto类的构造函数调用C函数
Proto\u register\u protocol()
(请参见
epan/wslua/wslua\u Proto.C
)。我找不到任何可以注销协议的lua函数。事实上,我甚至找不到一个C函数来注销它。

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


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

是否有有用的lua解析器教程和类文档?@harper类和函数在@Lekensteyn有文档记录是的,有类和函数列表。但是它被要求提供一个工作流程,而不是那个列表。@harper中有一个非常简单的例子,也是Hadriel关于Lua解剖器的一个例子(星期二第11课时)。@Lekensteyn您又错过了,抱歉。没有人要求提供(甚至是简单的)示例。这是对工作流改进的要求。“事实上,我甚至找不到一个C函数来注销它。”没有Lua,除了启动时间之外,没有任何机制可以在任何时间注册解析器(或其他插件),因此不需要注销。对于Lua,添加这一点可能是有意义的(并为Wireshark for Lua添加一些IDE功能——我认为有人用Lua编写了一个IDE,也许可以用于此)。