您的位置:首页 > 编程语言 > Lua

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

2016-02-29 17:09 375 查看
我的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: