使用Lua编写Wireshark解析ProtoBuf插件
文章目录
- Wireshark Protobuf Lua-dissector
- Step 1: 获取 Wireshark
- Step 2: 配置ProtoBuf相关设置
- 添加ProtoBuf查找路径
- Step 3 运行和调试Lua代码
- 1. 添加Lua脚本
- 2. 运行和调试
- Step 4: 写Lua Dissector代码 :)
- Step 5(Optional): Decode As
- Github工程地址
Wireshark Protobuf Lua-dissector
最近工作中遇到需要Wireshark抓包排查项目网络库的问题,并且需要用ProtoBuf协议解析抓到的二进制数据。网络上查了一圈都没有找到简单明了的教程能让我快速上手的,就搞了这个教程,帮自己纪录的同时也希望能帮到遇到同样问题的你。
这个教程专注于帮你写Lua插件帮你解析Wireshark中的ProtoBuf包,请确保已经掌握基础的Wireshark使用方法。如果还没掌握,网上有很多教学,很快就可以上手了!
Step 1: 获取 Wireshark
直接从 官网 下载。
Step 2: 配置ProtoBuf相关设置
添加ProtoBuf查找路径
顾名思义,告诉Wireshark去哪里查询你的.proto文件。我把我的所有(其实就一个).proto文件都放到了同一个文件夹里,然后添加到Wireshark里即可。
在版本 4.2.3中, 你可以通过一下方法配置ProtoBuf查找路径:
Edit -> Preferences,接着在左侧菜单中找到并展开Protocols标签,然后找到Protobuf并打开对应页面,就会得到以下的界面:

然后点击 “Protobuf search paths” 旁边的Edit按钮打开新窗口:

我把所有.proto文件都放一起了,也没有其他外部引用,所以我只添加了一个文件夹路径就OK啦。
Step 3 运行和调试Lua代码
1. 添加Lua脚本
创建并将我们自己写的Lua脚本放到指定文件夹中,Wireshark才能识别到我们的Lua脚本:
Help -> About Wireshark

点击Folder页签,双击Personal Lua Plugins路径打开文件夹,并将我们写好的脚本放入其中。
为了测试方便,我们现在只需要写一行简单的打印即可:
print("Hello World")
2. 运行和调试
成功将Lua脚本放到对应文件夹后,Wireshark会在每次启动的时候都运行一下你的脚本。你可以打开Lua控制台窗口看看脚本运行的结果。
打开控制台很简单,点击 Tools -> Lua Console:

上半部分的文本输入框是可以实时输入并且运行的Lua代码,我们这里用不到先不管它。重点放在下半部的输出窗口,可以看到我们脚本运行的结果已经打印出来了。
不过我们不希望每次改了代码还要重新运行Wireshark怎么办呢?Wireshark提供了重载Lua脚本的功能,可以在 Analysis -> Reload Lua Plugins 中找到,或者直接点击快捷键 Ctrl+Shift+L。
需要注意的是,重载Lua脚本之后,Wireshark会在已经捕获的每个包上重新跑一遍我们的Lua脚本。如果你此时已经捕获了大量的包,那么重载可能会消耗不少的时间。
Step 4: 写Lua Dissector代码 😃
到这步为止,所有的配置都已经完成,只需用Lua实现我们的ProtoBuf Dissector即可。
在我们写之前还有一些很有用的参考资料:
-
Wireshark有Lua APIs的文档在这里。
-
还有两个很好的简单教程在这里和那里。
以下的代码示例是在我综合了上面的内容之后,摘掉非必要的代码而实现的一个极简的Lua Dissector。不过也存在过于精简而不符合实际运用的需要,这个就需要使用者根据自己的实际需求和协议设计去修改代码了。
--获取Wireshark库里现成的ProtoBuf解析器
local protobuf_dissector = Dissector.get("protobuf");--Proto类可以拿来实现自己的解析器
--不过我这里只用来帮我注册上Wireshark的回调
--然后需要实际解析ProtoBuf的时候,我会调用上面获取到的官方解析器
--@param myProto 名字
--@param "My Proto" 描述
local my_proto = Proto("MyProto", "My Proto");---Wireshark会在每个包上调用这个预设函数
---@param tvb table 一个辅助操作读取到的二进制流的类对象
---@param pinfo table 储存了包体信息的类对象
---@param tree table GUI上展示信息用的根节点
-- 我的数据流会截取到的数据格式如下:(因项目而异)
-- [Header][Message Data]
-- Header: [2 bytes length]
my_proto.dissector = function(tvb, pinfo, tree)if tvb:captured_len() == 0 then return end;if pinfo.port_type == 2 then --TCPpinfo.columns.columns.protocol:set(my_proto.name);--创建一个新的UI节点来展示我们ProtoBuf解析的数据,当然也可以不创建新节点,直接展示在tree上local subtree = tree:add(my_proto, tvb());local offset = 0;local length = tvb(0, 2):le_uint(); --[2 bytes length]local data_len = length - 2; --计算实际的数据长度offset = offset + 2;--这行很关键,官方的解析器会根据这个字段去.proto文件里找对应的协议去解析pinfo.private["pb_msg_type"] = "message,myProto.Message";pcall(Dissector.call, protobuf_dissector, tvb(offset, data_len), pinfo, subtree);end
end--将我的Proto类对象注册到TCP端口上
--要注意的是,当你还不清楚实际发生的端口号时,先填0,后续再配置即可(具体配置方法看下一部分"Decode As")
DissectorTable.get("tcp.port"):add(0, my_proto);
Step 5(Optional): Decode As
当你需要动态调整Tcp端口时,可以在以下的菜单中手动配置:
Analyze -> Decode As

点击"+"号添加新的一行,字段选"TCP port"然后填入实际端口号,最后在Current下拉框中,找到我们刚刚添加的"MYPROTO"解析器后单击选择。
最后点击保存就配置完成啦!
PS:如果你的代码无误,又看不到你的解析器,请检查一下你是不是没有重载Lua代码。
Github工程地址
源码和教程我都有上传到Github,有需要的同学可以自行上去取源码
https://github.com/Kayn-Liu/WiresharkProtoBufDissectorLua.git
相关文章:
使用Lua编写Wireshark解析ProtoBuf插件
文章目录 Wireshark Protobuf Lua-dissectorStep 1: 获取 WiresharkStep 2: 配置ProtoBuf相关设置添加ProtoBuf查找路径 Step 3 运行和调试Lua代码1. 添加Lua脚本2. 运行和调试 Step 4: 写Lua Dissector代码 :)Step 5(Optional): Decode AsGithub工程地址 Wireshark Protobuf L…...
ClickHouse副本节点数据损坏恢复
参考链接:https://blog.csdn.net/qq_42082701/article/details/127771766 参考链接:https://kb.altinity.com/altinity-kb-setup-and-maintenance/suspiciously-many-broken-parts/ # 背景CK配置为1分片2副本# 配置参数,这里我们将max_suspicious_brok…...
YOLOv9改进策略:注意力机制 | SimAM(无参Attention),效果秒杀CBAM、SE
💡💡💡本文改进内容:SimAM是一种轻量级的自注意力机制,其网络结构与Transformer类似,但是在计算注意力权重时使用的是线性层而不是点积 yolov9-c-CoordAtt summary: 972 layers, 51024476 parameters, 510…...
宝塔 安装对外服务Tomcat和JDK
一、安装Tomcat\JDK 切记1:如果选择下载节点失败,请到软件商城安装 。 切记2:提醒安装Nginx或Apache ,先点安装,进入再打叉关闭。因为Tomcat服务足够为我们搭建JavaWeb网站服务了。 切记3:Nginx占用80端口…...
rust最新版本安装-提高下载速度
1)拉取依赖包将安装脚本输出到本地rust.sh脚本中 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs > rust.sh 2)更新rust.sh脚本内容、修改源 # 编辑rust.sh vi rust.sh # 将RUSTUP_UPDATE_ROOT的值替换为: RUSTUP_UPDATE_ROOT&q…...
数据清洗与预处理:打造高质量数据分析基础
随着数据的快速增长,数据分析已经成为企业和组织的核心业务。然而,原始数据往往包含各种杂质和异常,这就需要我们进行数据清洗和预处理,以确保分析结果的准确性和可靠性。 1. 数据清洗的重要性: 数据清洗是指对原始数据进行检查、修正和完善,以消除错误、不一致性和噪声…...
Linux服务器(Debian系)包含UOS安全相关巡检shell脚本
#!/bin/bash# Define output file current_date$(date "%Y%m%d") # Gets the current date in YYYYMMDD format output_file"server_security_inspection_report_${current_date}.txt"# Empty the file initially echo > $output_file# 获取巡检时间 (…...
BS4网络提取selenium.chrome.WebDriver类的方法及属性
BS4网络提取selenium.chrome.WebDriver类的方法及属性 chrome.webdriver: selenium.webdriver.chrome.webdriver — Selenium 4.18.1 documentation class selenium.webdriver.chrome.webdriver.WebDriver 是 Selenium 中用于操作 Chrome 浏览器的 WebDriver 类。WebDriver 类…...
Prompt Engineering(提示工程)
Prompt 工程简介 在近年来,大模型(Large Model)如GPT、BERT等在自然语言处理领域取得了巨大的成功。这些模型通过海量数据的训练,具备了强大的语言理解和生成能力。然而,要想充分发挥这些大模型的潜力,仅仅…...
移远通信亮相AWE 2024,以科技力量推动智能家居产业加速发展
科技的飞速发展,为我们的生活带来了诸多便利,从传统的家电产品到智能化的家居设备,我们的居家生活正朝着更智能、更便捷的方向变革。 3月14日,中国家电及消费电子博览会(Appliance&electronics World Expo…...
Java中上传数据的安全性探讨与实践
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一. 文件上传的风险 二. 使用合适的框架和库 1. Spr…...
Leetcode 17. 电话号码的字母组合
心路历程: 之前看过这道题的解法但是忘了。一开始想多重循环遍历,发现不知道写几个for循环,于是想到递归;发现递归需要记录选择的路径而不是返回节点值,想到了回溯。 回溯的解题模板:维护两个变量…...
蓝桥杯单片机快速开发笔记——独立键盘
一、原理分析 二、思维导图 三、示例框架 #include "reg52.h" sbit S7 P3^0; sbit S6 P3^1; sbit S5 P3^2; sbit S4 P3^3; void ScanKeys(){if(S7 0){Delay(500);if(S7 0){while(S7 0);}}if(S6 0){Delay(500);if(S6 0){while(S6 0)…...
Swift 面试题及答案整理,最新面试题
Swift 中如何实现单例模式? 在Swift中,单例模式的实现通常采用静态属性和私有初始化方法来确保一个类仅有一个实例。具体做法是:定义一个静态属性来存储这个单例实例,然后将类的初始化方法设为私有,以阻止外部通过构造…...
微信小程序上传图片c# asp.net mvc端接收案例
在微信小程序上传图片到服务器,并在ASP.NET MVC后端接收这个图片,可以通过以下步骤实现: 1. 微信小程序端 首先,在微信小程序前端,使用 wx.chooseImage API 选择图片,然后使用 wx.uploadFile API 将图片上…...
57、服务攻防——应用协议RsyncSSHRDP漏洞批扫口令猜解
文章目录 口令猜解——Hydra-FTP&RDP&SSH配置不当——未授权访问—Rsync文件备份协议漏洞——应用软件-FTP&Proftpd搭建 口令猜解——Hydra-FTP&RDP&SSH FTP:文本传输协议,端口21;RDP:windows上远程终端协议…...
java:Druid工具类解析sql获取表名
java:Druid工具类解析sql获取表名 1 前言 alibaba的druid连接池除了sql执行的功能外,还有sql语法解析的工具提供,参考依赖如下: <dependency><groupId>com.alibaba</groupId><artifactId>druid</ar…...
MySQL--深入理解MVCC机制原理
什么是MVCC? MVCC全称 Multi-Version Concurrency Control,即多版本并发控制,维持一个数据的多个版本,主要是为了提升数据库的并发访问性能,用更高性能的方式去处理数据库读写冲突问题,实现无锁并发。 什…...
数据挖掘简介与应用领域概述
数据挖掘,作为信息技术领域中的重要分支之一,旨在从大量数据中发现潜在的模式、关联和趋势,以提取有用的信息和知识。在信息爆炸时代,大量数据的积累成为了常态,数据挖掘技术的出现填补了人们处理这些数据的空白&#…...
瑞熙贝通打造智慧校园实验室安全综合管理平台
一、建设思路 瑞熙贝通实验室安全综合管理平台是基于以实验室安全,用现代化管理思想与人工智能、大数据、互联网技术、物联网技术、云计算技术、人体感应技术、语音技术、生物识别技术、手机APP、自动化仪器分析技术有机结合,通过建立以实验室为中心的管…...
从“只会聊天“到“全能员工“:2026年你需要了解的AI黑话(收藏版:小白程序员必备)
AI不再是一个聊天框。它已经进化成你的数字化同事。而你需要学会和它相处的"行话"。 引言:你的AI同事已经到岗还记得2023年人们第一次用ChatGPT的时候吗?大家的反应是:"哇,AI能写诗和画画!"然后就…...
Chrome for Testing 问题解决方案:测试环境搭建与兼容性保障(3个实战案例)
Chrome for Testing 问题解决方案:测试环境搭建与兼容性保障(3个实战案例) 【免费下载链接】chrome-for-testing 项目地址: https://gitcode.com/gh_mirrors/ch/chrome-for-testing Chrome for Testing 是一个专为浏览器自动化测试打…...
如何快速掌握Outfit字体:5个简单技巧打造专业级设计
如何快速掌握Outfit字体:5个简单技巧打造专业级设计 【免费下载链接】Outfit-Fonts The most on-brand typeface 项目地址: https://gitcode.com/gh_mirrors/ou/Outfit-Fonts Outfit字体是一款专业的开源无衬线字体,提供从Thin到Black的9种完整字…...
微信智能助手终极指南:零基础打造你的专属消息管家
微信智能助手终极指南:零基础打造你的专属消息管家 【免费下载链接】WechatBot 项目地址: https://gitcode.com/gh_mirrors/wechatb/WechatBot 你是否曾幻想过拥有一个24小时在线的微信助手,帮你自动回复消息、整理信息,让你从繁琐的…...
intv_ai_mk11应用场景:为政府基层单位生成政策解读简报、为制造业写设备操作SOP、为律所起草合同条款草稿
intv_ai_mk11 AI对话机器人在专业场景的三大应用实践 1. 应用场景概览 intv_ai_mk11 AI对话机器人是一款基于7B参数Llama架构的智能助手,能够通过自然语言交互完成多种专业任务。本文将重点介绍其在三个专业领域的实际应用: 为政府基层单位生成政策解…...
实战分享:我是如何搞定SHEIN新版反爬(anti-in, smdeviceid, armortoken, x-gw-auth)的
电商平台数据采集实战:逆向工程与参数生成策略 最近半年,电商平台的反爬机制呈现出明显的升级趋势。以某国际快时尚电商为例,其新增的四个核心校验参数(anti-in、smdeviceid、armortoken、x-gw-auth)构成了完整的安全验…...
Qwen3.5-4B-Claude-Opus-GGUF一键部署:CSDN镜像平台Web化推理服务上线指南
Qwen3.5-4B-Claude-Opus-GGUF一键部署:CSDN镜像平台Web化推理服务上线指南 1. 模型与平台介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型,重点强化了结构化分析、分步骤回答、代码与逻辑类问题的处理…...
Pixel Aurora Engine基础教程:8-BIT音效视觉化——将MIDI转像素动态图初探
Pixel Aurora Engine基础教程:8-BIT音效视觉化——将MIDI转像素动态图初探 1. 认识Pixel Aurora引擎 Pixel Aurora是一款专为像素艺术创作设计的AI绘图工作站,它将现代AI技术与复古游戏美学完美融合。这款引擎最独特之处在于能将音乐数据转化为动态像素…...
LingBot-Depth模型优化技巧:处理高分辨率图像的实用方法
LingBot-Depth模型优化技巧:处理高分辨率图像的实用方法 你是不是遇到过这样的情况:拿到一张高分辨率的室内场景照片,兴冲冲地丢给深度估计模型,结果要么显存爆炸,要么生成的效果图边缘模糊、细节丢失,完全…...
墨语灵犀网络安全知识库:基于AI的威胁情报分析与解读
墨语灵犀网络安全知识库:让AI成为你的安全分析师 最近和几个做安全运营的朋友聊天,他们都在抱怨同一件事:每天面对海量的安全告警和晦涩的漏洞报告,眼睛都快看花了。一份新的漏洞描述扔过来,光是理解它到底在说什么、…...
