使用 Wireshark 和 Lua 脚本解析通讯报文

server/2024/12/19 18:47:27/

在复杂的网络环境中,Wireshark 凭借其强大的捕获和显示功能,成为协议分析不可或缺的工具。然而,面对众多未被内置支持的协议或需要扩展解析的场景,Lua 脚本的引入为Wireshark 提供了极大的灵活性和可扩展性。本文将详细介绍如何使用 Lua 脚本来增强Wireshark 的功能,实现对复杂通讯报文的解析,从基础入门到高级应用,带你领略 Lua 脚本在 Wireshark 中的强大威力。

一、为什么选择Lua?

Lua 作为一种轻量级脚本语言,在Wireshark中具有以下显著优势:

  1. 简单易学:Lua语法简洁,上手快,适合快速开发和原型设计。
  2. 集成方便:Wireshark内置Lua支持,无需重新编译即可加载脚本插件。
  3. 灵活性高:Lua提供丰富的API,可访问Wireshark核心功能,如协议解析、数据包处理等。
  4. 社区活跃:Lua在游戏开发和多个领域有广泛应用,社区支持强大,易于获取帮助。
二、准备环境

确保已安装最新版本的 Wireshark,并准备好 Python 环境(用于生成某些协议库,如MAVLink)。如果解析特定协议,还需下载协议定义文件(如 XML 格式)。

三、创建 Lua 解析脚本
1. 安装 MAVLink(以 MAVLink 为例)

首先,克隆 MAVLink GitHub 仓库,并按照说明安装 MAVLink 工具:

git clone https://github.com/mavlink/mavlink.git
cd mavlink
2. 生成 Lua 解析代码

使用mavgen工具生成 Lua 解析代码。例如,为 common.xml 生成 MAVLink 2 Wireshark 插件:

python3 -m pymavlink.tools.mavgen --lang=WLua --wire-protocol=2.0 --output=mavlink_2_common message_definitions/v1.0/common.xml

生成mavlink_2_common.lua文件,包含解析函数。

3. 修改插件文件

根据需要修改生成的Lua文件,指定监控端口。例如:

lua">-- 绑定协议解析器到指定端口
local udp_dissector_table = DissectorTable.get("udp.port")
udp_dissector_table:add(14550, mavlink_proto)
udp_dissector_table:add(14580, mavlink_proto)
udp_dissector_table:add(18570, mavlink_proto)  -- 可能用于WSL2中的模拟
4. 添加自定义解析逻辑

对于非 MAVLink 协议或需要额外解析逻辑的情况,编写自定义 Lua 脚本。例如,解析假设的二进制协议:

lua">-- 创建新协议对象
local myproto = Proto("myproto", "My Custom Protocol")-- 定义字段
local f_field1 = ProtoField.uint8("myproto.field1", "Field 1", base.DEC)
local f_field2 = ProtoField.string("myproto.field2", "Field 2")
myproto.fields = {f_field1, f_field2}-- 解析函数
function myproto.dissector(buffer, pinfo, tree)pinfo.cols.protocol = "MYPROTO"local subtree = tree:add(myproto, buffer(), "My Custom Protocol Data")-- 解析第一个字节为无符号整数local field1 = buffer(0, 1):uint()subtree:add(f_field1, buffer(0, 1))-- 解析剩余部分为字符串local field2 = buffer(1, buffer:len()-1):string()subtree:add(f_field2, buffer(1, buffer:len()-1))
end-- 注册解码器
local udp_table = DissectorTable.get("udp.port")
udp_table:add(9000, myproto)  -- 假设协议使用UDP端口9000
四、导入 Lua 脚本到 Wireshark

将编写好的 Lua 脚本复制到 Wireshark 插件目录。路径因操作系统而异:

  • Linux~/.local/lib/wireshark/plugins~/.wireshark/plugins
  • WindowsProgram Files/Wireshark/plugins

启动 Wireshark,在 Help > About Wireshark > Plugins 中确认插件已加载。

五、捕获 MAVLink 流

在 Linux 系统中,可以使用 tcpdump 来捕获特定接口上的流。可以在笔记本电脑或外部计算机上执行此操作:

apt update
apt install tcpdump
tcpdump -i eth0 -w mavlink-capture.pcap

如果可以通过 SSH 访问远程机器,还可以将 tcpdump 流传输到本地机器,而不是将其记录到文件中。Wireshark 可以打开此流并使用上述工具和过滤器显示解码后的 MAVLink 消息,例如:

mkfifo /tmp/mavlink
wireshark -k -i /tmp/mavlink &
ssh root@10.41.1.1 -p 33333 "tcpdump -s 0 -U -n -w - -i lo not port 33333" > /tmp/mavlink

其中,需要根据远程机器的配置调整用户名、IP 和端口。

  • “mkfifo /tmp/mavlink” 创建一个命名管道用于流数据,
  • wireshark -k -i /tmp/mavlink &” 启动 Wireshark 并将命名管道作为输入立即开始捕获,
  • “ssh” 命令在远程机器上启动数据流并将其管道传输到本地机器的命名管道中,
  • “-s 0” 设置快照长度为默认,
  • “-U” 流数据包输出为包缓冲,不等待完整缓冲区,
  • “-n” 不转换地址,
  • “-w -” 将原始数据写入标准输出(管道传输到本地机器),
  • “-i lo” 定义要监听的接口(这里是环回接口,也可以根据需要更改为以太网、USB 或调制解调器接口),
  • “not port 33333” 不捕获 SSH 会话创建的数据,还可以添加更多过滤器来减少传输的数据。
六、使用 Wireshark 分析
  1. 选择网络接口:选择适当的接口捕获。
  2. 应用过滤器:使用协议名称(如myproto)过滤特定流。
  3. 查看消息详情:点击消息查看详细信息,包括字段值和解释。
    在这里插入图片描述
六、高级功能与应用

Lua 脚本在 Wireshark 中不仅限于基本解析,还可实现以下高级功能:

  • 统计分析:收集特定消息或事件的发生次数,生成图表或报告。
  • 实时响应:检测特定模式时触发警报或执行操作。
  • 自动化测试:模拟客户端行为,发送请求并验证响应,进行回归测试。

http://www.ppmy.cn/server/151512.html

相关文章

Flink是什么?Flink技术介绍

官方参考资料:Apache Flink — Stateful Computations over Data Streams | Apache Flink Flink是一个分布式流处理和批处理计算框架,具有高性能、容错性和灵活性。以下是关于Flink技术的详细介绍: 一、Flink概述 ‌定义‌:Fli…

使用阿里云Certbot-DNS-Aliyun插件自动获取并更新免费SSL泛域名(通配符)证书

进入nginx docker,一般是Alpine Linux系统 1. 依次执行命令: sudo docker-compose exec nginx bashapk updateapk add certbot apk add --no-cache python3 python3-dev build-baseapk add python3 py3-pippip3 install --upgrade pippip3 install certbot-dns-ali…

文件断点续传(视频播放,大文件下载)

客户端每次请求取大文件部分数据。 浏览器播放mp4视频时,会首先传Range消息头,检测到206状态码,和Content-Range,Accept-Ranges 会自动请求余下数据。后端需要在文件任意偏移量取数据。 参考: springboot项目实现断…

TensorFlow和Keras的区别和关系

TensorFlow和Keras是机器学习和深度学习中的两个重要的框架。 机器学习是计算机系统从经验中自动学习的一门学科,它的核心是从数据中构建算法模型,以便系统能够预测和改进某种行为,从而更加智能地执行新任务。 而深度学习是基于机器学习的一种…

linux 免密远程到多个服务器如何实现

要实现从主机 192.168.1.2 免密远程连接到 192.168.1.3 和 192.168.1.4,您可以使用 SSH 密钥对进行身份验证。以下是详细的步骤: 步骤 1:生成 SSH 密钥对 在 192.168.1.2 主机上生成 SSH 密钥对(如果您尚未生成过)&a…

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

系统介绍 基于ThinkPHP与LayUI构建的全方位进销存解决方案 本系统集成了采购、销售、零售、多仓库管理、财务管理等核心功能模块,旨在为企业提供一站式进销存管理体验。借助详尽的报表分析和灵活的设置选项,企业可实现精细化管理,提升运营效…

[shader]【图形渲染】【unity】【游戏开发】 Shader数学基础2-认识点和矢量

在计算机图形学和Shader编程中,点和矢量是两种常见且基础的数学对象。它们在空间中的作用和性质是理解图形渲染的关键。本篇文章将深入探讨点(Point)和矢量(Vector)的定义、特性以及它们之间的关系。 1. 点(Point)的定义 在数学和计算机图形学中,**点(Point)**用于…

如何高效使用Facebook Business Manager(商务管理平台)

Facebook Business Manager 是一款强大的工具,专为企业、广告主和团队协作而设计。它可以帮助用户集中管理所有的Facebook广告账户、页面、应用程序和企业资源,提供一个集中的平台进行营销活动的管理。无论是小型企业还是大型品牌,Business M…