SpyPort シリアル スニファ/ロガー

シリアルポート用スニファ & ロガー


SerialTool における SpyPort とは

SpyPort は、Windows 環境においてシリアルポートの全トラフィックを「カーネルレベル」から監視できる、SerialTool の機能です。
この方式では、当社チームが SerialTool 向けに専用開発したドライバを用いて、OS が特定の COM ポートに対して行うすべての呼び出しをフックします。
具体的には、COM ポートが別のアプリケーションによってオープンされて使用中であっても、カーネルドライバが Windows の IRP および IOCTL_SERIAL 信号をインターセプトしフィルタリングすることで、シリアル通信を「スニフ」することが可能です。
この機能は SerialTool の PRO 版でのみ利用できます。

メイン画面

スニフ/ログ取得できる内容

関心のある一部の信号だけを選択的にフィルタすることも、すべてのローレベルトラフィックをそのまま捉えることも可能です。 SpyPort では、送信トラフィックのみ(IRP_MJ_WRITE)、受信トラフィックのみ(IRP_MJ_READ)、またはすべての IOCTL_SERIAL を選択して完全なトラフィックを保存できます。 COM ポートの TX/RX に相当する IRP_MJ_WRITEIRP_MJ_READ については、テキスト/バイナリの両形式で保存でき、その他の信号についてはテキスト形式で保存可能です。

スニフ/ログされたデータの表示方法

SerialTool の高度な機能により、各パケットを詳細に表示し、その中身を ASCII または 16 進数のいずれかで確認できます。
これにより、目的のパターンをパケット内で素早く検索できるだけでなく、興味のあるパケットをバイナリ形式で保存/エクスポートしたり、ASCII 形式でクリップボードにコピーしたりすることが容易になります。
それぞれのパケットは、受信した正確な時刻(ミリ秒単位)、パケット種別、前後のパケットとの時間間隔など、重要な情報と共に丁寧に表示されます。
パケット解析の形式は、SerialTool バージョン 1.6.0 で導入された「セッションパケット」の仕組みに準拠しています。
ログ取得はいつでも停止でき、その時点で COM ポートを使用しているソフトウェアの動作を妨げることはありません。

スニフしたシリアルパケットの ASCII/16 進数表示

SerialTool と SpyPort の活用例

SpyPort モジュールの用途は多岐にわたり、例えば次のようなシーンがあります。

1. 自社製/他社製アプリケーションの監視。

産業・組込みの現場において、不具合が発生した際に「いつ」「どのタイミングで」バグが出ているかを特定するのは非常に困難です。自分たちのアプリケーションや他社製アプリの不具合が、数時間後あるいは長時間稼働後にようやく表面化することも少なくなく、その瞬間に開発者が常に立ち会えるとは限りません。 そのため、SerialTool と SpyPort モジュールは、長時間に渡るスニフ/ログ取得を直感的かつ効率的に行えるよう設計されており、開発者が問題の原因を突き止める助けとなります。
典型的な例として、正式版の製造ソフトがシリアルポート経由で他の機器と通信している産業アプリケーションが挙げられます。
不具合が発生した場合、問題がどこで起きているのかを確認するため、公式な「リリース環境」でのソフトウェア挙動を監視できることが重要です。SpyPort は監視対象ソフトの動作に干渉せず、入出力トラフィックをすべて解析することができます。

2. リバースエンジニアリング。

特定のソフトウェアがシリアルポートを通じて送受信しているトラフィックを「捕捉」したいケース、たとえば接続されたデバイスへのファームウェア書き込み中の通信内容を取得したい場合、SpyPort は最適なツールです。 外部ソフトウェアが送信するすべてのバイト(COM TX - IRP_MJ_WRITE)をバイナリ形式で直接保存し、必要なデータ(例:ファームウェア)を抽出できます。

3. デバッグ。

シリアルポート向けソフトウェアを開発する際には、送信データと受信データが正しいか、所定のタイミングを守っているか、さらに DTR や RTS などその他の COM ポート信号が正しく制御されているか、といった点を確認することが不可欠です。
自前のソフトを実装している開発者にとって、SpyPort はシリアルポートの動作が期待どおりか、ポートが正しくオープンされているか、読み書きが仕様どおりに行われているかを検証する強力な支援ツールとなります。 このように、SerialTool と SpyPort モジュールは、ソフトウェア全体が正しく作られているかを一歩ずつ確認するための、欠かせない作業ツールとなります。シリアルポートと通信するソフトウェアを開発しようとするなら、SpyPort はまさに「必須」の存在と言えるでしょう。

Filtered Signals by SerialTool

**FILL HERE**

IRP_MJ and IOCTL_SERIAL interpreted signals.

Signals List:

  • IRP_MJ_CREATE
  • IRP_MJ_CLOSE
  • IRP_MJ_CLEANUP
  • IRP_MJ_READ
  • IRP_MJ_WRITE
  • IRP_MJ_FLUSH_BUFFERS
  • IRP_MJ_QUERY_INFORMATION
  • IRP_MJ_SET_INFORMATION
  • IRP_MJ_SYSTEM_CONTROL
  • IOCTL_SERIAL_GET_BAUD_RATE
  • IOCTL_SERIAL_SET_BAUD_RATE
  • IOCTL_SERIAL_GET_HANDFLOW
  • IOCTL_SERIAL_SET_HANDFLOW
  • IOCTL_SERIAL_GET_LINE_CONTROL
  • IOCTL_SERIAL_SET_LINE_CONTROL
  • IOCTL_SERIAL_GET_TIMEOUTS
  • IOCTL_SERIAL_SET_TIMEOUTS
  • IOCTL_SERIAL_SET_QUEUE_SIZE
  • IOCTL_SERIAL_CONFIG_SIZE
  • IOCTL_SERIAL_GET_CHARS
  • IOCTL_SERIAL_SET_CHARS
  • IOCTL_SERIAL_SET_DTR
  • IOCTL_SERIAL_CLR_DTR
  • IOCTL_SERIAL_SET_RTS
  • IOCTL_SERIAL_CLR_RTS
  • IOCTL_SERIAL_SET_WAIT_MASK
  • IOCTL_SERIAL_GET_WAIT_MASK
  • IOCTL_SERIAL_WAIT_ON_MASK
  • IOCTL_SERIAL_PURGE
  • IOCTL_SERIAL_GET_COMMSTATUS
  • IOCTL_SERIAL_SET_BREAK_OFF
  • IOCTL_SERIAL_SET_BREAK_ON
  • IOCTL_SERIAL_CLEAR_STATS
  • IOCTL_SERIAL_RESET_DEVICE
  • IOCTL_SERIAL_SET_FIFO_CONTROL
  • IOCTL_SERIAL_SET_MODEM_CONTROL
  • IOCTL_SERIAL_SET_XOFF
  • IOCTL_SERIAL_SET_XON
  • IOCTL_SERIAL_GET_MODEM_CONTROL