本文介绍: 因为公司项目涉及的协议打包协议包内又嵌了一层IP包的奇葩套娃结构,为了方便抓包调试利用Wireshark协议插件开发功能,写了一个插件博文记录以备忘。

概述

因为公司项目涉及的协议打包协议包内又嵌了一层IP包的奇葩套娃结构,为了方便抓包调试利用Wireshark协议插件开发功能,写了一个插件,博文记录以备忘。

环境信息

Wireshark 4.0.3

协议结构体套娃图

在这里插入图片描述

插件安装

对应的协议解释文件复制到Wireshark安装目录plugins<版本号>
然后通过菜单按钮分析】->【重新载入Lua插件】,即可完成插件加载

完整代码

-- @brief XXX Protocol dissector plugin
-- @author XXX
-- @date 2023.12.03

-- create a new dissector
local NAME = "XXX"
local PORT = 2998
local foo = Proto(NAME, "XXX Protocol")

local fields = foo.fields
fields.ss = ProtoField.bytes(NAME .. ".ss", "SS", base.SPACE)
fields.payload = ProtoField.bytes(NAME .. ".payload", "XXX Payload", base.None)
fields.ic = ProtoField.bytes(NAME .. ".ic", "ic", base.SPACE)

-- dissect packet
function foo.dissector (buf, pinfo, tree)
	if buf:len() == 0 or buf:len() < 30 then return end
	local subtree = tree:add(foo)
	subtree:add(fields.ss, buf(0,20))
	subtree:add(fields.ic, buf(buf:len() - 10, 10))
	subtree:add(fields.payload, buf(20,buf:len() - 30))
	-- 提取内嵌数据
	local raw_data = buf(20,buf:len() - 30)
    -- 内嵌了一层IP协议,所以调用内部的Dissector解释
    Dissector.get("ip"):call(raw_data:tvb(), pinfo, tree)
end

-- 将协议添加右键Decode As,不写该行,只能根据端口啥的绑定具体的协议
DissectorTable.get("udp.port"):add_for_decode_as(foo)
DissectorTable.get("tcp.port"):add_for_decode_as(foo)
-- register this dissector
DissectorTable.get("udp.port"):add(PORT, foo)

效果图

在这里插入图片描述

参考链接

实战编写 wireshark 插件解析私有协议
Functions For New Protocols And Dissectors
Wireshark解析器(Dissector)插件-Lua
自己动手编写Wireshark Lua插件解析自定义协议
Mika’s tech blog

原文地址:https://blog.csdn.net/qq_38189542/article/details/134770911

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_35916.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注