wireshark的Lua插件开发

wireshark解析自定义协议

加载配置

安装根目录下init.lua文件为wireshark打开之后、读取或者抓取数据之前加载的配置文件,这里面包含wireshark对数据的解析配置,如果想要加载自己编写的lua插件,可在此文件末尾追加dofile(DATA_DIR.."dtd_gen.lua")

解析原理

协议使用端口查看:视图--内部--支持协议列表(Dissector Tables)--Integer Tables--TCP port

新协议注册

  1. 添加新协议:
    local test=Proto(name,desc)
  2. 添加解析器:
    function test.dissector(tvb.pinfo,tree) end
  3. 注册新协议到wireshark中:
    DissectorTable.get('表名'):add(端口,test)
    保存lua文件到全局配置
    (全局配置位置:帮助--关于wireshark--文件夹--全局Lua插件)
  4. Lua插件
local learn = Proto('learn','Learn Protocol')
function learn.dissector(tvb,pinfo,tree)
end
DissectorTable.get('tcp.port'):add(10002,learn)
# (tvb,pinfo,tree)
# tvb 缓冲数据包
# pinfo 协议信息
# tree 展示的树状结构

解释器编写

  1. dissector函数,具体数据包解析在wireshark中的树状结构
  2. 明确协议格式:Learn协议
    2.1 Trans_ID(16bit)
    2.2 Msg_Type(16bit)
    2.3 Msg_Data(32bit)
    2.4 Lua语言中的ProtoField表示协议字段
    可使用uint8、uint16、uint32等类型
    ProtoField.uint16("learn.ID","ID")
    ProtoField.uint16("learn.Type","Type")
    ProtoField.uint32("learn.Data","Data")
    2.5 合并字段
    learn.fields={Trans_ID,Msg_Type,Msg_Data}
  3. 解析函数
    3.1 设置wireshark报文列表上protocol列文本
    pinfo.cols.protocol=learn.name
    或者直接指定协议名称
    pinfo.cols.protocol = "learn"
    3.2 添加树状新节点
    local subtree = tree:add(learn,tvb(0))
    3.3 添加协议解析树
    subtree:add(Trans_ID,tvb(0,2))
    subtree:add(Msg_Type,tvb(2,2))
    subtree:add(Msg_Data,tvb(4,4)) # tvb(4,4) 起始位置为4,偏移4字节
  4. Lua插件(learn.lua)
local learn = Proto('learn','Learn Protocol')
Trans_ID = ProtoField.uint16("learn.ID","ID")
Msg_Type = ProtoField.uint16("learn.Type","Type")
Msg_Data = ProtoField.uint32("learn.Data","Data")

learn.fields = {Trans_ID,Msg_Type,Msg_Data}
function learn.dissector(tvb,pinfo,tree)
	pinfo.cols.protocol = "learn"
	local subtree = tree:add(learn,tvb(0))
	subtree:add(Trans_ID,tvb(0,2))
	subtree:add(Msg_Type,tvb(2,2))
	subtree:add(Msg_Data,tvb(4,4)) 
end
DissectorTable.get('tcp.port'):add(10002,learn) 

新协议测试

  1. xcap介绍
    下载
  2. 新建数据包
    packergroup(报文组)--creat packet group(创建报文组)--名称“learn_packet”--报文界面左上角+号,添加报文--双击添加到报文进行编辑
    1.png
    2.png
    3.png
    4.png
    注意:上图中Marker(Hex)的值全部设为0
    5.png
  3. wireshark抓包看新协议