Wireshark Lua插件入门

摘要

开发中经常通过抓包分析协议,对于常见的协议如 DNS wireshark 支持自动解析,便于人类的理解,对于一些私有协议,wireshark 提供了插件的方式自定义解析逻辑。

1 动手

废话少说,直接上手。

  1. 第一步当然是装上wireshark
  2. Win+R 输入 %APPDATA%\Wireshark,在打开的文件夹中新建插件文件夹:plugins
  3. 在 plugins 下创建 xxx.lua,直接开始编辑即可
Lua 复制代码
local my_proto = Proto("my_proto", "My Protocol")

local p_type = ProtoField.uint8("my_proto.p_type", "Type", base.DEC);
local p_val = ProtoField.uint16("my_proto.p_val", "Val", base.HEX);
local p_byte = ProtoField.new("Bytes", "my_proto.bytes", ftypes.BYTES)
local p_str = ProtoField.new("Str", "my_proto.str", ftypes.STRING)

my_proto.fields = {
	p_type,
	p_flag,
	p_val,
	p_byte,
	p_str
}

--[[
	tvb: 待解析数据
	pinfo: 协议解析树信息,包括UI上的显示
	treeitem: 上一级解析树
--]]
function process(tvb, length, tree)
	local offset = 0
	
	tree:add(p_type, tvb:range(offset, 1))
	offset = offset + 1
	tree:add(p_val, tvb:range(offset, 2))
	offset = offset + 2
	tree:add(p_byte, tvb:range(offset, 10))
	offset = offset + 10
	tree:add(p_str, tvb:range(offset, 13))
	offset = offset + 13
	
	local left = length - offset
	tree:add(p_byte, tvb:range(offset, left))
end

function my_proto.dissector(tvb, pinfo, treeitem)
	pinfo.cols.protocol:set("MY_PROTO")
	pinfo.cols.info:set("MY_PROTO info")
	
	local tree = treeitem:add(my_proto, tvb:range(0))
	process(tvb, tvb:len(), tree)
end

-- 绑定UDP端口号57754, 凡是匹配的报文都会调用my_proto.dissector解析
local udp_table = DissectorTable.get("udp.port")
udp_table:add(57754, my_proto)

2 打完收工

Ctrl + Shift + L 刷新插件,查看解析后的报文:

3 进阶

其它骚操作参考官方文档:Chapter 10. Lua Support in Wireshark

相关推荐
wuyk5555 小时前
《WiFi 嵌入式物联网开发全套实战》| 第 33 章 Wireshark 无线抓包环境搭建、802.11 帧过滤规则
物联网·测试工具·wireshark
不像程序员的程序媛6 小时前
检测网络的命令mtr详解
网络
天启HTTP6 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
运维行者_7 小时前
网络性能监控怎么做?从自动发现到根因分析的4个环节
运维·服务器·网络·人工智能·支持向量机
hz567899 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
优橙教育9 小时前
零基础学AI应用开发要多久?3个月能到什么水平
服务器·开发语言·网络·php
AIgorithmGEEK9 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
物联网软硬件开发-轨物科技13 小时前
【轨物洞见】什么是产品碳足迹(PCF)?ISO 14067 计算方法与应用场景深度解读
大数据·网络·人工智能
姜鱼问生16 小时前
docker exec 排查容器问题:从日志到进程
运维·网络·数据库·docker·容器