WiresharkパケットキャプチャModbus TCP/RTUパケット解析完全ガイド

無料無料技术资料

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

WiresharkパケットキャプチャModbus TCP/RTUパケット解析完全ガイド

WiresharkでModbusを分析する理由

Wiresharkは、1998 年にGerald Combsによって作成され、現在はWireshark Foundationによって維持されている世界で最も人気のあるオープンソースのネットワークプロトコルアナライザです。公式サイト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:MBAPヘッダ(Transaction ID、Protocol ID、Length、Unit ID)と各機能コードのPDUを自動的に識別するデフォルトポート502
  • 関数コードの解析FC 01-FC 06、FC 15-FC 16、FC 23などの一般的な機能コードのリクエストとレスポンスのフォーマット
  • 異常コード。:自動的に異常応答をマークし、異常コードの意味を表示します(0 1 =不正機能、0 2 =不正データアドレス、0 3 =不正データ値、0 4 =スレーブ機器の故障など)。
  • 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

fromから公式ダウンロードページWindowsインストールパッケージをダウンロードします。インストール時の選択Npcap(Windowsのパッケージ)とUSBPcap(USBデータを取得する必要がある場合)。

macOS

brew install --cask wireshark

Modbus TCPメッセージの取得

Linuxサーバ侧パッケージ

Modbus TCPトラフィックがLinuxサーバまたはゲートウェイで発生する場合、tcpdumpを直接使用してパケットをキャプチャするのが最も効率的です。

すべての宛先ポート502(Modbus TCPデフォルトポート)のTCPパケットを取得します。
sudo tcpdump -i 0-w mod_capture. ap 'tport 502

特定のIPデバイスからの通信のみを取得する
sudo tcpdump -i 0-w mod_capture. ap 'host 192.168.1.100 and tport 502

Ctrl+Cを押してパケットを停止する
Wiresharkを使用したコンピュータに.pcapファイルを転送します。

Windows側のダイレクト·キャプチャ

Wiresharkを開き、ターゲットデバイスと通信するネットワークカードEthernetカードやWi-Fiなどを選択し、Capture Filterに入力します。tcp port 502パックを開始します。Modbus PollなどのModbusマスタープログラムを実行すると、完全なModbus TCP 通信をキャプチャできます。

Modbus TCPメッセージの詳細

WiresharkでModbus TCPメッセージを選択し、Modbus/TCPレイヤを展開します。典型的なリードホールドレジスタ要求メッセージ構造は以下の通りです。

フィールドフィールドBytesの数値の例説明書は
Transaction ID20x0001トランザクション識別子、クライアントは自己増加、サーバはそのまま返す
Protocol ID20x0000プロトコル識別、Modbusは0に固定
Length20x0006以降のバイト数ユニットID + PDU
Unit ID10x01スレーブアドレスSlave ID
Function Code10x03機能コード(03=リードホールドレジスタ)
Starting Address20x0000開始レジスタアドレス
Quantity20x000A読み取り回数(10回)

対応する応答メッセージには、同じMBAPヘッダ+関数コード0 x 0 3+バイトカウント0 x 14(20バイト=10レジスタ)+データ領域が含まれます。

Wiresharkディスプレイフィルタ

[表示フィルタ] Display Filterは、取得したメッセージ内のターゲットデータをすばやくフィルタ処理するために使用します。以下は、一般的なModbus関連フィルタです。

#すべてのModbusプロトコルメッセージをフィルタリング
modbusの

#指定された関数コードをフィルタリングする(例:0 3リードホールドレジスタ)
modbus.func_code == 3

#異常応答の選択
modbus.exception_code

#スレーブアドレス指定のフィルタリング
mod._id == 1

#例外を含むメッセージをフィルタリング
mod.exception_code!= 0

#組み合わせフィルタリング:ステーション1の関数コード16から(マルチレジスタ書き込み)
mod._id == 1およびmod.c_code == 16

#IPアドレスとModbus関数コードでフィルタリング
ip.addr == 192.168.1.100 and modbus.func_code === 3

#MBAPヘッダトランザクションID 5のリクエストとレスポンスのペアのみを参照してください。
modbus.trans_id == 5

WiresharkでModbus 通信障害をトラブルシューティングする

ケース1:データが読めない-スレーブが応答しない

パケットをキャプチャした後、リクエストフレームだけが応答フレームを持たないことがわかりました(またはTCP RST/再送信が発生します)。検査方法:

  1. スレーブデバイスでTCPポート(デフォルト502)が開いていることを確認します。
  2. スレーブアドレスUnit IDが要求内のと一致しているかどうかを確認します
  3. TCP層の例外(再送、RST)がないか確認し、ネットワーク層に問題がある場合

ケース2:例外コード02(不正なデータアドレス)が返される

Wiresharkは、リクエスト内の開始アドレス+の数がスレーブのレジスタ範囲を超えていることを確認できます。Wiresharkでリクエストメッセージ→“フォロー”→“TCPストリーム”を右クリックすると、リクエストと例外レスポンスの完全な会話が表示されます。

ケース3:データ値の例外-エンディアンの問題

読み込まれた32ビット浮動小数点数はWiresharkでは正常に表示されますが、マスタープログラムではNaNまたはMaximumとして表示されます。これは通信層に問題がないことを示しており、マスタープログラムのエンディアン解析エラーです。検証はWiresharkで手動で計算できます。右レジスタのデータ→コピー →値→ 16進数の生値を取得し、IEEE 754電卓を使用してオンラインで検証します。

Modbus RTU(シリアル)メッセージの取得

Modbus RTUはRS-232またはRS-485 物理層を介して送信され、Wiresharkで直接取得することはできない。通常のプログラム:

シナリオ1:USBからシリアルポートへ+USB Pcap

WindowsにUSBPcap(Wiresharkインストール時のオプションコンポーネント)をインストールすると、USB-Serialデバイスから生データを取得できます。ただし、RTUフレーム(アドレス+関数コード+データ+ CRC)を独自に解析する必要があります。

方案2:シリアルポート監視ソフトウェア

専用の監視ツールの使用をお勧めします。

  • Serial Port Monitor(Windows商用ソフトウェア):Modbus RTUフレームを直接監視·解析
  • CAS Modbus RTU Parser:無料オンラインツール、ペースト16進バイト自動解析
  • PortMon(Windows無料):マイクロソフトの低レベルシリアル監視ツール

シナリオ3:RTUからTCPへのパケットキャプチャ

フィールドでシリアルサーバ(MOXA NPortなど)を使用する場合は、WiresharkでTCP側でパケットをキャプチャすることができ、メッセージ内容はRTUフレームになります。

Wireshark Modbus解析の詳細

統計分析I/Oグラフ

メニュー → Statistics → I/O Graph、フィルタを設定modbusModbus 通信の周波数と時間分布が観察されます。周期的なスパイクまたはギャップが見つかった場合は、ポーリングパラメータが不適切に設定されている可能性があります。

完全なTCPフローを見る

任意のModbus TCPメッセージを右クリック→フォロー → TCPストリームをクリックし、完全なTCPコネクション内のすべてのModbusリクエストとレスポンスの生データを表示します。これは、“読み取りデータの誤り”の問題をチェックするツールです。

Modbusデータのエクスポート

File → Export Packet Dissections → As CSVは、デコードされたModbusメッセージをすべてCSV形式にエクスポートすることができ、ExcelやPythonで簡単にバッチ分析できます。

概要まとめ

WiresharkはModbusプロトコルのデバッグにかけがえのないツールです。“見えない”通信プロセスを可視化することで、エンジニアは問題が発生しているプロトコルスタックのどのレイヤー(TCPコネクションの確立失敗、MBAPヘッダフィールドのエラー、ファンクションコードの不一致、レジスタアドレスの範囲外、データエンディアン解析エラーなど)を特定するのに役立ちます。Modbus 通信の開発とデバッグに携わるエンジニアにとって、Wiresharkパケット解析の習得は必須のスキルです。

この資料を実際のプロジェクトに活用しませんか?

ツールセンターで電文解析、CRCチェック、デバイスデバッグを行うか、要件を送信して選定と接続のアドバイスを受けましょう。

エンジニア会員

この記事を実行可能なデバッグ資料に

登録すると、高度な電文解析、資料パックのダウンロード、コード例、エンジニアリングケース、優先技術サポートが利用可能に。実際のプロジェクト納品に最適です。

高度なツール無制限
資料パックとコードパック
完全なエンジニアリングケースライブラリ
優先技術サポート窓口

发表回复

あなたのメールアドレスアドレス不会被公开。 必須項目已用 * 标注