LUA插件——wireshark插件开发
来源:互联网 发布:知乎读书 书单 编辑:程序博客网 时间:2024/06/05 07:20
参考文档:
http://www.cnblogs.com/zzqcn/p/4840589.html
该博主针对wireshark下LUA脚本的开发做了一系列的笔记,实测详细并且有效,故转载。
1. 骨架
首先新建一个文件,命名为foo.lua,注意此文件的编码方式不能是带BOM的UTF8,否则wireshark加载它时会出错(不识别BOM):
复制代码-- @brief Foo Protocol dissector plugin-- @author zzq-- @date 2015.08.12-- create a new dissectorlocal NAME = "foo"local PORT = 9877local foo = Proto(NAME, "Foo Protocol")-- dissect packetfunction foo.dissector (tvb, pinfo, tree)end-- register this dissectorDissectorTable.get("udp.port"):add(PORT, foo)
这是一个lua解析器的骨架:创建解析器对象、解析器函数、将解析器注册到wireshark解析表。
写完之后,将foo.lua拷贝到plugins/<版本号>目录即可,然后用文件打开之前抓的foo协议的Pcap文件foo.pcap。
是的,wireshark没有提示错误,然而什么变化也没有:当然,因为我们没有编写实际的解析代码。
依次打开”Internals”、”Dissector tables“菜单,选中”Interger tables”标签页,下拉滚动条,找到“UDP port“树节点,展开,再往下来,会发现FOO协议赫然在列,证明foo插件确实被正确加载了:
回到顶部
2. 完善
下面需要写一些具体的代码,首先是定义foo协议的各个字段:
-- create fields of foolocal fields = foo.fieldsfields.type = ProtoField.uint8 (NAME .. ".type", "Type")fields.flags = ProtoField.uint8 (NAME .. ".flags", "Flags")fields.seqno = ProtoField.uint16(NAME .. ".seqno", "Seq No.")fields.ipaddr = ProtoField.ipv4(NAME .. ".ipaddr", "IPv4 Address")
根据foo协议字段类型的不同,分别调用ProtoField的不同方法创建它们,其中第一个参数是字段的缩写,第2个参数是字段的全名,另外还有一些可选参数表示进制,掩码之类,这里略去。
然后编写具体的解析函数:
复制代码-- dissect packetfunction foo.dissector (tvb, pinfo, tree) local subtree = tree:add(foo, tvb()) local offset = 0 -- show protocol name in protocol column pinfo.cols.protocol = foo.name -- dissect field one by one, and add to protocol tree local type = tvb(offset, 1) subtree:add(fields.type, type) subtree:append_text(", type: " .. type:uint()) offset = offset + 1 subtree:add(fields.flags, tvb(offset, 1)) offset = offset + 1 subtree:add(fields.seqno, tvb(offset, 2)) offset = offset + 2 subtree:add(fields.ipaddr, tvb(offset, 4))end复制代码
wireshark约定解析器函数接口有3个参数,第一个是报文数据buffer tvb,第2个是报文信息结构pinfo,第3个是协议解析树tree。
subtree = tree:add(foo, tvb())
为foo协议往协议解析树上添加了一个新节点subtree;
pinfo.cols.protocol = foo.name
把wireshark报文列表上的”Protocol“列的文本置为foo协议名称”Foo”;
接下来,根据Foo协议的规范依次解析各字段,并把它们的信息加入到协议解析树。
编写完成后把新的foo.lua拷贝到插件目录,重启wireshark打开foo.pcap,显示效果如下:
也可以对foo协议应用显示过滤器:
- LUA插件——wireshark插件开发
- Wireshark Lua插件学习心得
- Wireshark lua插件
- wireshark插件开发——前期工作
- Wireshark插件开发小结
- wireshark插件开发
- wireshark 插件开发
- wireshark插件开发
- wireshark 插件开发
- Wireshark插件开发
- wireshark插件开发资料
- wireshark插件开发小结
- wireshark插件开发
- wireshark插件开发
- wireshark插件开发
- wireshark插件开发
- [置顶]wireshark插件开发
- 使用lua编写Wireshark的dissector插件
- Form表单文件上传
- 章文嵩博士和他背后的负载均衡帝国
- Android view 相关一些基础
- Winforms: DataGridView的显示刷新问题
- codeforces Anton and Fairy Tale
- LUA插件——wireshark插件开发
- 解决Axure发布分享预览的3个方法
- 欢迎使用CSDN-markdown编辑器
- jQuery为动态生成的select元素添加事件的方法
- 【c语言基础】关于指针和变量的思考
- 深度学习系列:GoogLeNet系列解读 [转发]
- 如果你喜欢上了一个程序员小伙,献给所有的程序员女友
- 使用GeoServer发布shp数据为WMS服务和WFS服务
- Android NDK 简介