Wireshark解析器在Lua中出错:“0”;树项协议字段/协议句柄无效";

Wireshark解析器在Lua中出错:“0”;树项协议字段/协议句柄无效";,lua,wireshark,wireshark-dissector,Lua,Wireshark,Wireshark Dissector,我对Lua完全是新手,这是我第一次尝试编写wireshark解剖仪。 我想用Lua脚本分析SSH而不使用密码。我编写了一个脚本来检测第一步的数据包长度和填充长度 这是我的剧本: do 局部p_试验=原型(“试验”,“试验”); 本地f_数据包长度=ProtoField.uint32(“数据包长度”) 本地f_padding_length=ProtoField.uint8(“padding_length”) p_测试字段={ f_数据包长度, f_填充长度 } 功能p_测试解剖器(buf、pkt、

我对Lua完全是新手,这是我第一次尝试编写wireshark解剖仪。
我想用Lua脚本分析SSH而不使用密码。我编写了一个脚本来检测第一步的数据包长度和填充长度

这是我的剧本:

do
局部p_试验=原型(“试验”,“试验”);
本地f_数据包长度=ProtoField.uint32(“数据包长度”)
本地f_padding_length=ProtoField.uint8(“padding_length”)
p_测试字段={
f_数据包长度,
f_填充长度
}
功能p_测试解剖器(buf、pkt、root)
本地偏移=0
本地buf_len=buf:len()
本地t=根:添加(p_测试,buf:范围(偏移))
t:add(f_数据包长度,buf:range(偏移量,4))
偏移量=偏移量+4
t:添加(f_padding_length,buf:范围(偏移量,1))
偏移量=偏移量+1
终止
本地tcp_table=DissectorTable.get(“tcp.port”)
tcp_表:添加(22,p_测试)
终止
在通过Evalutate Lua运行代码并应用测试过滤器后,我发现数据包详细信息中有一个错误:

Lua Error: [string "do..."]:19: Tree item ProtoField/Protocol handle is invalid (ProtoField/Proto not registered?)
第19行对应于
t:add(f\u数据包长度…

有人能解释一下这个错误吗?

提前感谢。

如果您的代码在Wireshark的真实Lua脚本中,那么您的代码将可以正常工作……可以位于personal plugins目录中的
.Lua
文件中,也可以加载“
-X Lua_script:
”命令行开关

但是你不能在
tools->evaluate
窗口中注册一个新协议,因为现在注册一个新协议(或新字段)已经太迟了。不幸的是Wireshark报告的错误并不清楚,因为它工作了一半,但实际上它不工作,不能工作


问题是新协议注册在内部分为两个阶段:第一阶段是加载和执行Lua脚本时,将协议和字段添加到内部临时表中,然后在加载所有Lua脚本后,第二阶段将新协议和字段从临时表移动到最终表中运行时表并注册,然后wireshark完成加载,您将看到GUI。第二阶段只会在wireshark首次启动时发生一次。但运行
工具->评估
窗口之后就会发生,因此为时已晚。

如果上面的代码在wireshark的真实Lua脚本中,那么它将正常工作……eit通过位于personal plugins目录中的
.lua
文件中,或通过使用“
-X lua\u脚本:
”命令行开关加载,她将获得更高的性能

但是你不能在
tools->evaluate
窗口中注册一个新协议,因为现在注册一个新协议(或新字段)已经太迟了。不幸的是Wireshark报告的错误并不清楚,因为它工作了一半,但实际上它不工作,不能工作

问题是新协议注册在内部分为两个阶段:第一阶段是加载和执行Lua脚本时,将协议和字段添加到内部临时表中,然后在加载所有Lua脚本后,第二阶段将新协议和字段从临时表移动到最终表中运行时表并注册,然后wireshark完成加载,您将看到GUI。第二阶段只在wireshark首次启动时发生一次。但运行
tools->evaluate
窗口之后发生,因此为时已晚