请教大家关于wireshark添加lua自定义规则解析模块的问题

我的lua代码如下所示,打开wireshar直接死掉。。希望大家忙我看看哪里有问题,谢谢。

do

--[[
创建一个新的协议结构 foo_proto
第一个参数是协议名称会体现在过滤器中
第二个参数是协议的描述信息,无关紧要
--]]
local sf_app = Proto("SFAPP", "SIFANG Protocol, reserved by www.sf-auto.com")

--[[
下面定义字段
--]]
local pf_maintype = ProtoField.uint8("sfcan.maintype", "MainType", base.NONE)
local pf_subtype = ProtoField.uint8("sfcan.subtype", "SubType", base.NONE)
local pf_devtype = ProtoField.uint8("sfcan.devtype", "DevType", base.NONE)
local pf_framecnt = ProtoField.uint8("sfcan.framecnt", "FrameCnt", base.NONE)
local pf_framesn = ProtoField.uint16("sfcan.framesn", "FrameSn", base.NONE)
local pf_appdatalen = ProtoField.uint16("sfcan.appdatalen", "AppDataLen", base.NONE)
local pf_appdata = ProtoField.string("sfcan.appdata", "AppData", base.NONE)
local pf_appdatacrc = ProtoField.uint8("sfcan.appdatacrc", "APPDataCrc", base.NONE)

-- 将字段添加都协议中
sf_app.fields = {
pf_maintype,
pf_subtype,
pf_devtype,
pf_framecnt,
pf_framesn,
pf_appdatalen,
pf_appdata,
pf_appdatacrc
}

--[[
下面定义 foo 解析器的主函数,这个函数由 wireshark调用
第一个参数是 Tvb 类型,表示的是需要此解析器解析的数据
第二个参数是 Pinfo 类型,是协议解析树上的信息,包括 UI 上的显示
第三个参数是 TreeItem 类型,表示上一级解析树
--]]
function sf_app.dissector(tvb, pinfo, tree)

-- 设置一些 UI 上面的信息
pinfo.cols.protocol:set("SFAPP")
pinfo.cols.info:set("SFAPP Protocol")

local offset = 0
local datalen = 0
local buf_len = tvb:len()

-- 在上一级解析树上创建 foo 的根节点
local root = treeitem:add(sf_app, tvb:range(offset))

-- 下面是想该根节点上添加子节点,也就是自定义协议的各个字段
-- 注意 range 这个方法的两个参数的意义,第一个表示此时的偏移量
-- 第二个参数代表的是字段占用数据的长度
root:add(pf_maintype, tvb:range(offset, 1))
offset = offset+1
root:add(pf_subtype, tvb:range(offset, 1))
offset = offset+1
root:add(pf_devtype, tvb:range(offset, 1))
offset = offset+1
root:add(pf_framecnt, tvb:range(offset, 1))
offset = offset+1
root:add(pf_framesn, tvb:range(offset, 2))
offset = offset+2
root:add(pf_appdatalen, tvb:range(offset, 2))
offset = offset+2

-- 计算消息内容的长度
local sfapp_content_len = tvb:range(6, 2):uint()
root:add(pf_appdata, tvb:range(offset, sfapp_content_len))
offset = offset+sfapp_content_len

root:add(pf_appdatacrc, tvb:range(offset, 1))
offset = offset+1
end

-- 向 wireshark 注册协议插件被调用的条件
local eth_table = DissectorTable.get("ethertype")
eth_table:add(16640, sf_app)

end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值