Wireshark-Packet - Analyse Modbus TCP / RTU-Nachrichten Vollständiger Leitfaden

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

Wireshark-Packet - Analyse Modbus TCP / RTU-Nachrichten Vollständiger Leitfaden

Warum sollte ich Modbus mit Wireshark analysieren

Wireshark ist der weltweit beliebteste Open-Source - Netzwerkprotokoll-Analysator, der 1998 von Gerald Combs erstellt wurde und von der Wireshark Foundation betreut wird. Offizielle Webseitewww.wireshark.org。Es verfügt über einen vollständigen Modbus-TCP - Parser, der automatisch MBAP-Header, Funktionscodes, Datenbereiche und Ausnahmecodes in Modbus-TCP - Nachrichten erkennt und analysiert. Für Modbus-RTU - Nachrichten kann Wireshark auch über einen USB-to - Serial-Adapter oder Remote-Packet - Scraping analysieren.

In der Inbetriebnahme der industriellen Automatisierung ist der häufigste Schmerzpunkt "Kommunikation nicht funktioniert, aber ich weiß nicht warum". Wireshark ermöglicht es Ihnen, jeden Frame auf dem Bus zu sehen - was eine Anforderung gesendet, was eine Antwort gegeben hat, wo ein Timeout auftritt, was ein Ausnahmecode ist - und verwandelt unsichtbare Kommunikationsprozesse in eine nachverfolgbare Beweiskette.

Wireshark unterstützt Modbus-Protokoll

Der Modbus-Protokollparser von Wireshark befindet sich inepan/dissectors/packet-modbus.cund erkennt automatisch Folgendes:

  • Modbus/TCP: Standardport 502, erkennt automatisch den MBAP-Header (Transaction-ID, Protocol-ID, Length, Unit-ID) und die PDU für die einzelnen Funktionscodes
  • Funktionscode-Auslösung: Anforderungs - und Antwortformate für gängige Funktionscodes wie FC01 - FC06, FC15 - FC16 und FC23
  • Ausnahmecode: Ausnahmeantwort automatisch markiert und Ausnahmecode-Bedeutung anzeigt (01 = illegale Funktionen, 02 = illegale Datenadressen, 03 = illegale Datenwerte, 04 = Ausfall von Slave-Geräten usw.)
  • Modbus RTU over TCP: Einige Gateways verpacken RTU-Frame in TCP und können Wireshark auch analysieren

Installieren von Wireshark

Linux (Ubuntu / Debian)

sudo apt-get update
sudo apt-get install wireshark

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

Windows

Download-WebseiteLaden Sie das Windows-Installationspaket herunter Bei der Installation müssenNpcap(Windows-Package - Treiber) undUSBPcap(Wenn Sie USB-Daten übertragen möchten).

macOS

brew install --cask wireshark

Modbus-TCP - Nachrichten

Linux-Server - Paket-Snap

Wenn die Modbus TCP-Kommunikation auf einem Linux-Server oder Gateway stattfindet, ist das direkte Scrape Paket am effizientesten mit 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-Seite - Direkt-Snap - Paket-Snap

Öffnen Sie Wireshark, wählen Sie eine Netzwerkkarte aus, die mit dem Zielgerät kommuniziert (z. B. Ethernet oder Wi-Fi), und geben Sie in den Capture Filter ein:tcp port 502Klick, um die Tasche zu fangen. Führen Sie jetzt Ihr Modbus-Hosterprogramm aus (z. B. Modbus Poll), um den vollständigen Modbus-TCP - Kommunikationsprozess zu erfassen.

Modbus-TCP - Nachricht

Wählen Sie eine Modbus-TCP - Nachricht in Wireshark aus und erweitern Sie die Ebene "Modbus / TCP". Eine typische Read-Hold - Register-Anforderung Nachricht ist wie folgt aufgebaut:

FeldAnzahl der BytesBeispielwertBeschreibung
Transaction ID20x0001Transaktions-Identifikator, Client-Selbstvergrößerung, Server-Rückgabe wie vor
Protocol ID20x0000Protokoll-Identifikation, Modbus fixiert auf 0
Length20x0006Folgende Bytes (Unit ID + PDU)
Unit ID10x01Slave-ID
Function Code10x03Funktionscode (03 = Read Hold Register)
Starting Address20x0000Start-Register - Adresse
Quantity20x000AAnzahl der Lese (10)

Die entsprechende Antwort-Nachricht enthält den gleichen MBAP-Header + Funktionscode 0x03 + Bytes Count 0x14 (20 Bytes = 10 Registers) + Datenbereich.

Wireshark-Anzeigefilter - Tipp

Der Anzeigefilter wird verwendet, um Zieldaten in den gezeichneten Nachrichten schnell zu filtern. Hier sind die üblichen Modbus-bezogenen Filter:

# 筛选所有 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

Praxisbeispiel: Modbus-Kommunikationsfehler mit Wireshark zu beheben

Fall 1: Daten können nicht gelesen werden - keine Antwort von Slave Station

Nach der Erfassung des Pakets wurde nur ein Anforderungsframe ohne Antwortframe (oder TCP RST / Retransmission) gefunden, was bedeutet, dass das Slave-Gerät nicht korrekt antwortet. Prüfmethode:

  1. Überprüfen Sie, ob der TCP-Port (Standard 502) auf dem Slave-Gerät geöffnet ist
  2. Überprüfen Sie, ob die Slave-Adresse (Einheits-ID) mit der Anforderung übereinstimmt
  3. Überprüfen Sie, ob eine TCP-Schicht - Ausnahme (Retransmission, RST) vorhanden ist, falls dies ein Problem auf der Netzwerkschicht ist

Fall 2: Ausnahme-Code 02 (illegale Datenadresse) zurückgegeben

Wireshark kann sehen, dass die Anzahl der Startadresse + in der Anforderung über den Registerbereich der Slave-Station hinausgeht. Klicken Sie in Wireshark mit der rechten Maustaste auf die Anforderungsnachricht → "Follow → TCP Stream", um die vollständige Anforderungs - und Ausnahme-Antwort - Dialoge zu sehen.

Fall 3: Ausnahmewert - Byte-Sequenz - Problem

Die gelesenen 32 - Bit-Fließkommazahlen werden in Wireshark normal angezeigt, aber im Master-Programm als NaN oder Maximum angezeigt. Das zeigt, dass die Kommunikationsschicht kein Problem ist, es ist ein Fehler in der Analyse der Bytefolge des Hauptprogramms. Die Validierung kann in Wireshark manuell berechnet werden: Rechtsklick auf Registerdaten → "Copy → Value" erhalten Sie den hexadezimalen Originalwert und überprüfen Sie ihn online mit einem IEEE 754 - Rechner.

Modbus RTU-Nachrichten (Serial Port)

Modbus RTUs werden über die physische Schicht RS - 232 oder RS - 485 übertragen und können nicht direkt mit Wireshark erfasst werden. Häufige Szenarien:

Szenario1: USB-zu - serieller Anschluss + USBPcap

Installieren Sie USBPcap (die optionale Komponente bei der Installation von Wireshark) unter Windows, um Rohdaten auf USB-zu - seriellen Anschlüssen zu erfassen. Die RTU-Frame müssen jedoch selbst aufgelöst werden (Adresse + Funktionscode + Daten + CRC).

Option 2: Serielle Portüberwachungssoftware

Es wird empfohlen, spezielle Serial Port Monitoring Tools zu verwenden:

  • Serial Port Monitor(Windows-Business - Software): Modbus-RTU - Frames direkt überwachen und analysieren
  • CAS Modbus RTU Parser: kostenloses Online-Tool zum Einfügen von Hexadezimal-Bytes automatisch analysieren
  • PortMon(Windows kostenlos): Microsoft-Unterlying - Serial-Port - Monitoring-Tool

Szenario 3: RTU-to - TCP-Gateway - Paket-Erfassen

Wenn Sie einen seriellen Port-Server (wie MOXA NPort) vor Ort verwenden, können Sie das Paket auf der TCP-Seite mit Wireshark erfassen, der Inhalt der Nachricht ist ein RTU-Frame.

Wireshark Modbus-Analyse

Statistische Analyse: I / O-Diagramm

Menü → Statistik → I / O-Graph, Filter alsmodbusHier kann man die Frequenz - und Zeitverteilung der Modbus-Kommunikation beobachten. Wenn periodische Spitzen oder Lücken festgestellt werden, können die Polling-Parameter falsch konfiguriert sein.

Überprüfen Sie den vollständigen TCP-Stream

Mit der rechten Maustaste auf eine Modbus-TCP - Nachricht → Follow → TCP Stream können Sie die Rohdaten für alle Modbus-Anfragen und - Antworten in einer vollständigen TCP-Verbindung anzeigen. Dies ist ein scharfes Werkzeug, um das Problem der "Falschstellung der Lesedaten" zu lösen.

Exportieren von Modbus-Daten

File → Export Packet Dissections → As CSV können alle dekodierten Modbus-Nachrichten in das CSV-Format exportiert werden, um die Massenanalyse mit Excel oder Python zu erleichtern.

Zusammenfassung

Wireshark ist ein unersetzliches Werkzeug für das Debugging des Modbus-Protokolls. Es kann "unsichtbare" Kommunikationsprozesse visualisieren und hilft Ingenieuren, genau zu identifizieren, auf welcher Ebene des Protokollstacks das Problem auftritt - ob es sich um einen fehlgeschlagenen TCP-Verbindungsaufbau, einen Fehler im MBAP-Headerfeld, eine Fehlpassung des Funktionscodes, eine Überschreitung der Registeradresse oder einen Fehler bei der Analyse der Daten-Byte - Sequenz handelt. Für jeden Ingenieur, der sich mit der Entwicklung und dem Debuggen von Modbus-Kommunikation beschäftigt, ist die Beherrschung der Wireshark-Packet - Analyse eine wesentliche Fähigkeit.

Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.