Wireshark抓包分析Modbus TCP/RTUmessage完全指南

freefree技术Resources

这篇内容可直接阅读,适合用于基础学习和Search引流。

Wireshark抓包分析Modbus TCP/RTUmessage完全指南缩略图
🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.
本文目录
  1. 1. 为什么用 Wireshark 分析 Modbus?
  2. 2. Wireshark 对 Modbus protocol的支持
  3. 3. 安装 Wireshark
  4. 4. Linux(Ubuntu/Debian)
  5. 5. Windows
  6. 6. macOS
  7. 7. 抓取 Modbus TCP message
  8. 8. Linux 服务器端抓包
  9. 9. Windows 端直接抓包
  10. 10. Modbus TCP message详解
  11. 11. Wireshark 显示过滤器技巧
  12. 12. 实战案例:用 Wireshark 排查 Modbus 通信故障
  13. 13. 案例1:读不到data——从站无Response
  14. 14. 案例2:返回Exception Code 02(Illegal data address)
  15. 15. 案例3:data值异常——endianness问题
  16. 16. 抓取 Modbus RTU(串口)message
  17. 17. 方案1:USB 转串口 + USBPcap
  18. 18. 方案2:串口监控软件
  19. 19. 方案3:在 RTU 转 TCP 网关上抓包
  20. 20. Wireshark Modbus 分析进阶技巧
  21. 21. 统计分析:I/O 图表
  22. 22. View完整的 TCP 流
  23. 23. export Modbus data
  24. 24. 总结

为什么用 Wireshark 分析 Modbus?

Wireshark 是全球最流行的开源网络协议分析器,由 Gerald Combs 于 1998 年创建,现由 Wireshark 基金会维护。官网 www.wireshark.org。它内置了完整的 Modbus TCP 协议Parse器(dissector),可以自动识别和Parse Modbus TCP message中的 MBAP 头、function code、data area和Exception Code。对于 Modbus RTU message,Wireshark 也可以通过 USB 转串口适配器或远程抓包的方式进行分析。

在Automation的debug现场,最常见的痛点就是”通信不通但不知道为什么”。Wireshark 能让你看到总线上的每一帧data——Request发了什么、Response回了什么、超时发生在哪个环节、Exception Code是什么——把看不见的通信过程变成可追踪的证据链。

Wireshark 对 Modbus protocol的支持

Wireshark 的 Modbus protocolParse器位于 epan/dissectors/packet-modbus.c,能够自动识别以下内容:

  • Modbus/TCP:默认端口 502,自动识别 MBAP 头(Transaction ID、Protocol ID、Length、Unit ID)和各function code的 PDU
  • function codeParse:FC01-FC06、FC15-FC16、FC23 等常用function code的Request和Responseformat
  • Exception Code:自动标注Exception Response,并显示Exception Code含义(01=Illegal function、02=Illegal data address、03=Illegal data value、04=Substation equipment malfunction等)
  • Modbus RTU over TCP:部分网关将 RTU 帧封装在 TCP 中传输,Wireshark 也能Parse

安装 Wireshark

Linux(Ubuntu/Debian)

sudo apt-get update
sudo apt-get install wireshark

# 允许非 root 用户抓包
sudo usermod -a -G wireshark $USER
# 注销后重新Login生效

Windows

官网Download页面 Download Windows 安装包。安装时需勾选 Npcap(Windows 抓包驱动)和 USBPcap(如需抓 USB 转serial data )。

macOS

brew install --cask wireshark

抓取 Modbus TCP message

Linux 服务器端抓包

如果 Modbus TCP 通信发生在 Linux 服务器或网关上,直接用 tcpdump 抓包效率最高:

# 抓取所有目标端口为 502 的 TCP message(Modbus TCP 默认端口)
sudo tcpdump -i eth0 -w modbus_capture.pcap 'tcp port 502'

# 只抓指定 IP 设备的通信
sudo tcpdump -i eth0 -w modbus_capture.pcap 'host 192.168.1.100 and tcp port 502'

# 按 Ctrl+C 停止抓包
# 将 .pcap 文件传输到有 Wireshark 的电脑上分析

Windows 端直接抓包

打开 Wireshark,选择与目标设备通信的网卡(如以太网卡或 Wi-Fi),在 Capture Filter 中输入 tcp port 502,点击开始抓包。此时运行你的 Modbus 主站程序(如 Modbus Poll),即可捕获到完整的 Modbus TCP 通信过程。

Modbus TCP message详解

在 Wireshark 中选中一条 Modbus TCP message,展开 “Modbus/TCP” 层。一个典型的读保持registerRequestmessage结构如下:

fieldbyte count示例值说明
Transaction ID20x0001Transaction identifier,客户端自增,服务端原样返回
Protocol ID20x0000协议标识,Modbus 固定为 0
Length20x0006后续byte count(Unit ID + PDU)
Unit ID10x01slave address(Slave ID)
Function Code10x03function code(03=读保持register)
Starting Address20x0000Starting register address
Quantity20x000AReading quantity(10个)

对应的Responsemessage包含同样的 MBAP 头 + function code 0x03 + byte计数 0x14(20byte=10个register)+ data area。

Wireshark 显示过滤器技巧

显示过滤器(Display Filter)用于在已抓取的message中快速筛选目标data。以下是常用的 Modbus Related过滤器:

# 筛选所有 Modbus protocolmessage
modbus

# 筛选指定function code(如 03 读保持register)
modbus.func_code == 3

# 筛选Exception Response
modbus.exception_code

# 筛选指定slave address
modbus.unit_id == 1

# 筛选包含异常的message
modbus.exception_code != 0

# 组合过滤:从站 1 的function code 16(写多register)
modbus.unit_id == 1 and modbus.func_code == 16

# 按 IP address和 Modbus function code过滤
ip.addr == 192.168.1.100 and modbus.func_code == 3

# 只看 MBAP 头 Transaction ID 为 5 的Request-Response对
modbus.trans_id == 5

实战案例:用 Wireshark 排查 Modbus 通信故障

案例1:读不到data——从站无Response

抓包后发现只有Request帧没有Response帧(或出现 TCP RST/重传),说明从站设备没有正确Response。检查方法:

  1. Confirm TCP 端口(默认 502)在从站设备上已开放
  2. 检查slave address(Unit ID)是否与Request中的一致
  3. View是否有 TCP 层异常(重传、RST),如有则说明网络层有问题

案例2:返回Exception Code 02(Illegal data address)

Wireshark 可以看到Starting address in the request + quantity超出了从站的register范围。在 Wireshark 中右键点Requestmessage → “Follow → TCP Stream”,可以看到完整的Request和Exception Response对话。

案例3:data值异常——endianness问题

读取到的 32 位浮点数在 Wireshark 中显示正常,但在主站程序中显示为 NaN 或极大值。这说明通信层没问题,是主站程序的endiannessParse有误。可以在 Wireshark 中手动计算验证:右键register data → “Copy → Value” 获取hexadecimal原始值,用 IEEE 754 计算器在线验证。

抓取 Modbus RTU(串口)message

Modbus RTU 通过 RS-232 或 RS-485 物理层传输,不能直接用 Wireshark 抓取。常见方案:

方案1:USB 转串口 + USBPcap

在 Windows 上安装 USBPcap(Wireshark 安装时可选组件),可以抓取 USB 转串口设备上的raw data。但需要自行Parse RTU 帧(address + function code + data + CRC)。

方案2:串口监控软件

Recommended for use专门的串口监控Tools:

  • Serial Port Monitor(Windows 商业软件):可直接监控和Parse Modbus RTU 帧
  • CAS Modbus RTU Parser:freeOnline Tools,粘贴hexadecimalbyte自动Parse
  • PortMon(Windows free):微软出品的底层串口监控Tools

方案3:在 RTU 转 TCP 网关上抓包

如果现场使用了串口服务器(如 MOXA NPort),可以在 TCP 侧用 Wireshark 抓包,message内容即为 RTU 帧。

Wireshark Modbus 分析进阶技巧

统计分析:I/O 图表

菜单 → Statistics → I/O Graph,设置过滤器为 modbus,可以观察到 Modbus 通信的频率和time分布。如果发现周期性尖峰或间隙,可能是轮询参数配置不当。

View完整的 TCP 流

右键任意 Modbus TCP message → Follow → TCP Stream,可以View一次完整 TCP connect中所有 Modbus Request和Response的raw data。这是排查”读取data错位”问题的利器。

export Modbus data

File → Export Packet Dissections → As CSV,可以将所有解码后的 Modbus messageexport为 CSV format,方便用 Excel 或 Python 进行批量分析。

总结

Wireshark 是 Modbus protocoldebug中不可替代的Tools。它能够将”看不见”的通信过程可视化,帮助工程师精准定位问题发生在协议栈的哪一层——是 TCP connect建立失败、MBAP 头fieldError、function code不匹配、register address越界还是dataendiannessParseError。对于任何从事 Modbus 通信开发和debug的工程师,掌握 Wireshark 抓包分析是必备技能。

技术术语(共 7 个)—— 点击展开
Modbus RTU基于串行链路的Modbus协议,使用binaryCoding和CRC check
Modbus TCP基于以太网的Modbus协议变体,使用TCP/IP传输
function codeModbusfunction code指定读/写OperationType,如01读线圈、03读保持register
registerModbus register存储data单元,分线圈/离散输入/保持/输入register四类
网关协议转换设备,如 Modbus RTU ↔ Modbus TCP
串口计算机与外部设备进行串行通信的物理接口
保持registerModbus 16位可读写data,address从40001开始
来源/Tools信息 —— 点击展开
来源 Modbus Chinese Network(modbus.cn) —— China leadingModbus通信协议技术社区 Category Modbus DebuggingTools 字数 3316 字 · 阅读约 9 分钟 更新 2026-06-26 永久链接 https://www.modbus.cn/43929.html
Recommended Tool: Modbus Debug Assistant WeChat Mini Program
Modbus Chinese Network官方推出的Modbus DebuggingTools,支持 Modbus RTU/TCP 实时通信debug、register读写、线圈控制、data监控和message分析。 无需安装,微信Search「Modbus DebuggingAssistant」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇Resources用于真实项目?

进入Tools中心进行messageParse、CRC verification和设备debug,或Submit requirements获取选型与接入建议。

工程师member

把这篇文章变成可执行的debugResources

开通后可使用高级messageParse、Resources包Download、Code Example、工程案例和优先Technical Support,适合真实项目交付。

高级Tools不限次
Resources包与代码包
Complete Engineering Case Library
优先Technical Support入口

发表回复

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