Wireshark抓包分析Modbus TCP/RTU프레임完全指南

무료무료 기술 자료

이 글은 바로 읽을 수 있으며 기초 학습과 검색 유입에 적합합니다.

Wireshark抓包分析Modbus TCP/RTU报文完全指南

为什么用 Wireshark 分析 Modbus?

Wireshark 是全球最流行的오픈소스네트워크프로토콜分析器,由 Gerald Combs 于 1998 年创建,现由 Wireshark 基金会维护。官网 www.wireshark.org。它内置了完整的 Modbus TCP 프로토콜분석器(dissector),可以自动识别和분석 Modbus TCP 프레임中的 MBAP 头、기능 코드、데이터区和异常码。对于 Modbus RTU 프레임,Wireshark 也可以通过 USB 转시리얼 포트适配器或远程抓包的방식进行分析。

在산업 자동화的디버깅现场,最常见的痛点就是"통신不通但不知道为什么"。Wireshark 能让你看到总线上的每一帧데이터——请求发了什么、响应回了什么、超时发生在哪个环节、异常码是什么——把看不见的통신过程变成可追踪的证据链。

Wireshark 对 Modbus 프로토콜的支持

Wireshark 的 Modbus 프로토콜분석器位于 epan/dissectors/packet-modbus.c,能够自动识别以下콘텐츠:

  • Modbus/TCP:默认포트 502,自动识别 MBAP 头(Transaction ID、Protocol ID、Length、Unit ID)和各기능 코드的 PDU
  • 기능 코드분석:FC01-FC06、FC15-FC16、FC23 等常用기능 코드的请求和响应형식
  • 异常码:自动标注异常响应,并显示异常码含义(01=非法功能、02=非法데이터주소、03=非法데이터值、04=슬레이브设备故障等)
  • Modbus RTU over TCP:部分게이트웨이将 RTU 帧封装在 TCP 中传输,Wireshark 也能분석

安装 Wireshark

Linux(Ubuntu/Debian)

sudo apt-get update
sudo apt-get install wireshark

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

Windows

从 官网下载页面 下载 Windows 安装包。安装时需勾选 Npcap(Windows 抓包驱动)和 USBPcap(如需抓 USB 转시리얼 포트데이터)。

macOS

brew install --cask wireshark

抓取 Modbus TCP 프레임

Linux 服务器端抓包

如果 Modbus TCP 통신发生在 Linux 服务器或게이트웨이上,直接用 tcpdump 抓包效率最高:

# 抓取所有目标포트为 502 的 TCP 프레임(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 프레임详解

在 Wireshark 中选中一条 Modbus TCP 프레임,展开 "Modbus/TCP" 层。一个典型的读유지 레지스터请求프레임结构如下:

필드바이트数예제值설명
Transaction ID20x0001트랜잭션 식별자,클라이언트自增,服务端原样返回
Protocol ID20x0000프로토콜标识,Modbus 固定为 0
Length20x0006后续바이트数(Unit ID + PDU)
Unit ID10x01슬레이브 주소(Slave ID)
기능 코드10x03기능 코드(03=读유지 레지스터)
Starting 주소20x0000시작레지스터주소
Quantity20x000A읽을 수량(10个)

对应的响应프레임包含同样的 MBAP 头 + 기능 코드 0x03 + 바이트计数 0x14(20바이트=10个레지스터)+ 데이터区。

Wireshark 显示过滤器技巧

显示过滤器(Display Filter)用于在已抓取的프레임中快速筛选目标데이터。以下是常用的 Modbus 相关过滤器:

# 筛选所有 Modbus 프로토콜프레임
modbus

# 筛选指定기능 코드(如 03 读유지 레지스터)
modbus.func_code == 3

# 筛选异常响应
modbus.exception_code

# 筛选指定슬레이브 주소
modbus.unit_id == 1

# 筛选包含异常的프레임
modbus.exception_code != 0

# 组合过滤:슬레이브 1 的기능 코드 16(写多레지스터)
modbus.unit_id == 1 and modbus.func_code == 16

# 按 IP 주소和 Modbus 기능 코드过滤
ip.addr == 192.168.1.100 and modbus.func_code == 3

# 只看 MBAP 头 Transaction ID 为 5 的请求-响应对
modbus.trans_id == 5

实战案例:用 Wireshark 排查 Modbus 통신故障

案例1:读不到데이터——슬레이브无响应

抓包后发现只有请求帧没有响应帧(或出现 TCP RST/重传),설명슬레이브设备没有正确响应。检查方法:

  1. 确认 TCP 포트(默认 502)在슬레이브设备上已开放
  2. 检查슬레이브 주소(Unit ID)是否与요청 내一致
  3. 보기是否有 TCP 层异常(重传、RST),如有则설명네트워크层有문제

案例2:返回异常码 02(非法데이터주소)

Wireshark 可以看到요청 내시작주소 + 数量超出了슬레이브的레지스터范围。在 Wireshark 中右键点请求프레임 → "Follow → TCP Stream",可以看到完整的请求和异常响应对话。

案例3:데이터值异常——바이트序문제

읽기到的 32 位浮点数在 Wireshark 中显示正常,但在마스터程序中显示为 NaN 或极大值。这설명통신层没문제,是마스터程序的바이트序분석有误。可以在 Wireshark 中手动계산验证:右键레지스터데이터 → "복사 → Value" 获取16진수原始值,用 IEEE 754 계산器在线验证。

抓取 Modbus RTU(시리얼 포트)프레임

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

方案1:USB 转시리얼 포트 + USBPcap

在 Windows 上安装 USBPcap(Wireshark 安装时可选组件),可以抓取 USB 转시리얼 포트设备上的原始데이터。但需要自行분석 RTU 帧(주소 + 기능 코드 + 데이터 + CRC)。

方案2:시리얼 포트监控软件

推荐使用专门的시리얼 포트监控도구:

  • Serial Port Monitor(Windows 商业软件):可直接监控和분석 Modbus RTU 帧
  • CAS Modbus RTU Parser:무료온라인 도구,粘贴16진수바이트自动분석
  • PortMon(Windows 무료):微软出品的底层시리얼 포트监控도구

方案3:在 RTU 转 TCP 게이트웨이上抓包

如果现场使用了시리얼 디바이스 서버(如 MOXA NPort),可以在 TCP 侧用 Wireshark 抓包,프레임콘텐츠即为 RTU 帧。

Wireshark Modbus 分析进阶技巧

통계分析:I/O 图表

菜单 → Statistics → I/O Graph,设置过滤器为 modbus,可以观察到 Modbus 통신的频率和时间分布。如果发现周期性尖峰或间隙,可能是轮询매개변수설정不当。

보기完整的 TCP 流

右键任意 Modbus TCP 프레임 → Follow → TCP Stream,可以보기一次完整 TCP 연결中所有 Modbus 请求和响应的原始데이터。这是排查"읽기데이터错位"문제的利器。

导出 Modbus 데이터

File → Export Packet Dissections → As CSV,可以将所有解码后的 Modbus 프레임导出为 CSV 형식,方便用 Excel 或 Python 进行批量分析。

总结

Wireshark 是 Modbus 프로토콜디버깅中不可替代的도구。它能够将"看不见"的통신过程可视化,帮助엔지니어링师精准定位문제发生在프로토콜栈的哪一层——是 TCP 연결建立失败、MBAP 头필드错误、기능 코드不일치、레지스터주소越界还是데이터바이트序분석错误。对于任何从事 Modbus 통신개발和디버깅的엔지니어링师,掌握 Wireshark 抓包分析是必备技能。

실제 프로젝트에 이 자료를 활용하시겠습니까?

도구 센터에서 프레임 분석, CRC 검증, 장비 디버깅을 진행하거나 요청을 제출하여 선정 및 연동 제안을 받아보세요.

엔지니어 회원

이 글을 실행 가능한 디버깅 자료로 활용하세요

가입하면 고급 프레임 분석, 자료 패키지 다운로드, 코드 예제, 엔지니어링 사례, 우선 기술 지원을 이용할 수 있어 실제 프로젝트 납품에 적합합니다.

고급 도구 무제한 이용
자료 패키지와 코드 패키지
완전한 엔지니어링 사례 라이브러리
우선 기술 지원 채널

답글 작성

이메일 주소는 공개되지 않습니다. 必填项已用 * 标注