本文主要是介绍wireshark 用LUA二次开发插件 解析器(Dissector),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
LUA菜鸟教程:https://www.runoob.com/lua/lua-functions.html
在线编辑运行器:https://www.runoob.com/try/runcode.php?filename=HelloWorld&type=lua
【参考】
https://www.cnblogs.com/zzqcn/p/4846745.html
https://blog.csdn.net/wangquan1992/article/details/100161021
前言
Wireshark是一款流行的网络协议分析工具,它支持多种协议的解析,并且允许用户通过编写插件来扩展其功能。Lua是一种轻量级的编程语言,它被集成到Wireshark中,允许用户编写脚本来自定义协议解析逻辑。
协议
Protocol: TCP 0x6(6)
UDP 0x11 (17)
===========================================================
1. 环境准备
- 安装Wireshark:确保你的系统上已经安装了Wireshark。
- 创建插件文件夹:Wireshark安装目录下
plugins
的子文件夹,用于存放Lua插件。
2. 解析器 Dissector
解析器(Dissector)是Wireshark中的概念,用于解析协议,将报文中对应的Bytes转为相应的字段值,可以简单理解为Wireshark中的解码器。
它不只能解析将相应位置的Bytes转为对应字段,还能将解析出来的字段用于报文过滤,还能自定义信息(Info)列中显示的自定义信息。
能方便开发人员调试诊断协议相关问题,比如断连后不重连,报文不正确,未发心跳。
解析器组成部分:
协议定义
字段定义
协议和字段关联
解析器主函数
协议注册
3. 编写Lua插件
-
创建Lua文件:在
plugins
文件夹中创建一个新的Lua文件,例如myplugin.lua
。 -
定义协议:在Lua文件中定义一个新的协议,例如:
local myproto = Proto("myproto", "My Protocol") local ptype = ProtoField.uint8("myproto.ptype", "Type", base.DEC) local pval = ProtoField.uint16("myproto.pval", "Val", base.HEX) local pbyte = ProtoField.new("Bytes", "myproto.bytes", ftypes.BYTES) local pstr = ProtoField.new("Str", "myproto.str", ftypes.STRING) myproto.fields = {ptype, pval, pbyte, pstr}
-
编写解析函数:定义一个函数来解析数据包,例如:
function myproto.dissector(tvb, pinfo, tree)local offset = 0tree:add(ptype, tvb(offset, 1))offset = offset + 1tree:add(pval, tvb(offset, 2))offset = offset + 2tree:add(pbyte, tvb(offset, tvb:len() - offset))tree:add(pstr, tvb(offset, tvb:len() - offset)) end
-
绑定协议到端口:如果需要将你的协议绑定到一个特定的端口,可以使用以下代码:
local udp_port = 12345 local udp_dissector_table = DissectorTable.get("udp.port") local myproto_dissector = Dissector.get("myproto") udp_dissector_table:add(udp_port, myproto_dissector)
4. 调试和测试
- 使用Lua控制台:Wireshark提供了一个Lua控制台,你可以在这里运行Lua代码来测试你的插件。
这篇关于wireshark 用LUA二次开发插件 解析器(Dissector)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!