中継とキャプチャ

CommSim はスタブ(転送先なし)・中継(転送先あり)のどちらの動作でも、受信パケットと送信パケットをログ常設ペインに記録します。

セッションの 「転送先(上流)」 を有効にすると、CommSim はテスト対象アプリと実機の間に入り、通信を中継しながら全パケットを記録します。実機でしか起きない不具合の調査や、実通信の内容をもとに再現環境を構築する際に使います。

転送先を設定していないセッションは、CommSim が実機の代わりに応答するスタブとして動作します。スタブ動作でも受信・送信の両方がログペインに記録されます。同じプロジェクトにスタブセッションと中継セッションを共存させることができます。

まず手を動かして試すならプロキシ(中継)を実機なしで試す(同梱サンプル)。上流の実機を用意せずに、中継を立てる→記録を見る→狙い撃ち偽装→記録をシナリオ化、までを通しで試せます。このページは設定リファレンスです。

構成イメージ

テスト対象アプリ下流
CommSim下流ポートで待受
実機転送先=上流ホスト:ポート

双方向の全パケットをキャプチャ

  • 下流(テスト対象側): CommSim はサーバとして待ち受け、テスト対象アプリが接続します。
  • 上流(実機側): CommSim はクライアントとして、設定した転送先の実機へ接続します。

設定手順

  1. 「+ セッションを追加」でセッションを作成します。
  2. 接続設定で、下流(アプリ側)の待受設定(プロトコル・ポート等)を指定します。
  3. 接続設定の 「転送先(上流)へ中継する」 にチェックを入れ、実機のホストとポートを指定します。
  4. 「起動」をクリックします。下流の待ち受けを開始し、上流の実機へ接続します。

セッションのヘッダに表示される状態ラベルが「中継として動作中(フック N 件)」になれば準備完了です。

転送先を設定したセッションでも、バイナリ構造応答・オートメーション・ログの各タブはすべて使えます。

上流(実機)へ未接続のときは警告バナーが出ます。 転送先を有効にしたセッションで、起動時に実機へ接続できなかった場合(実機がまだ起動していない・ホスト/ポート違い・ケーブル未接続など)は、セッション画面の上部に「上流(実機)へ未接続:中継していません(スタブ動作)」という警告バナーを表示します。中継できていないことが一目で分かるので、「実機に繋いでいるつもりが実は CommSim だけが応答していた」という取り違えを防げます。CommSim はそのまま約 2 秒間隔で自動的に再接続を試み、実機が立ち上がると警告が消えて中継が始まります(手動での再起動は不要です)。

通信の動き

テスト対象アプリからの受信パケットは、次の順序で処理されます。

  1. テスト対象アプリが送信
  2. オートメーション(パケット一致トリガー)を評価
    • マッチした場合 → フック(CommSim が応答を返す。実機へは転送しない)
  3. マッチなし → バイナリ構造応答(構造体ルール)を評価
    • マッチした場合 → フック(CommSim が応答を返す。実機へは転送しない)
  4. いずれにもマッチしない → 実機へ転送 + ログ記録(App→Device)
  5. 実機が応答 → ログ記録(Device→App)し、テスト対象アプリへそのまま中継
  • どのルールにもマッチしない受信は自動的に実機へ転送されます。
  • 実機からの返信は常にそのままテスト対象アプリへ中継され、ログペインに記録されます。
  • 実機への転送に失敗してもログへの記録は続きます。転送先が未接続のときはセッション上部に警告バナーが出て、CommSim が自動で再接続を試みます(上記の設定手順を参照)。

フック(特定パケットだけ差し替える)

中継中でもオートメーションとバイナリ構造応答が有効です。受信パケットがルールにマッチした場合、実機へ転送せずに CommSim がルールの応答を返します(フック=差し替え/注入)。このパケットはログペインの「Inj」列にチェックが付いて区別でき、その行は淡くハイライトされます。マッチしないパケットはそのまま実機へ転送されます。

差し替えは「実機をほぼそのまま通しつつ、狙ったメッセージだけ細工する」ためのフォールト/値の注入ツールです。スタブ動作(全偽装)では作れない「実機 99% + 狙った 1% だけ偽装」を、ルールを 1 つ追加するだけで実現します。主な用途は次のとおりです。

  • 読み取り系の値注入(推奨):STATUS・センサ値など状態を変えない要求の応答を差し替え、実機が今は出せない値(過熱・境界値・特定エラーコードなど)を「報告させて」クライアントの反応を試す。
  • 単発のフォールト注入:特定の要求にだけ NAK・壊れた応答・無応答を返し、クライアントの異常系ハンドリングを試す。
  • 破壊的コマンドのガード:危険なコマンドを実機へ通さず、安全な応答で受け流す。

状態遷移コマンド(START / STOP / SET など)の差し替えには注意。 差し替えるとそのリクエストは実機へ届かないため、実機の状態は進みません。一方クライアントは「操作できた」と認識するため、クライアントの認識と実機の実状態がズレます。このズレは連続運用に向かないため、差し替えは上記のような読み取り系の値注入・短時間のフォールト試験を主目的に使ってください。実機に操作を実行させたうえで応答内容だけ変えたい、という用途には差し替えは適しません(素通し=実機へ転送を基本にします)。

オートメーションの Forward ステップ

オートメーションの送信ステップに 「Forward(上流へ転送)」 があります。「このパケットを明示的に実機へ転送する」という指定で、転送しつつ別のパケットはフックするといった細かい制御に使います。詳しくは オートメーション を参照してください。

ログペインで記録を確認する

ログ常設ペインに、送受信したパケットが時系列の DataGrid 形式で一覧表示されます。新しいエントリが追加されると自動的に最下部へスクロールします(上方をスクロール中は追従しません)。

内容
ソース(#N)接続番号(TCP サーバ複数クライアント時に区別)
時刻記録した時刻(HH:mm:ss.fff)
#通し番号
種別Tx(送信)/ Rx(受信)/ Sys(システム)/ Err(エラー)/ HB(ハートビート)/ Proxy(中継)/ Script(スクリプト)
方向AppToDevice(テスト対象アプリ → CommSim または実機)/ DeviceToApp(CommSim または実機 → テスト対象アプリ)
注入CommSim がフックして差し替えた行に ✓ が付く。その行は淡くハイライトされる
Lenバイト数
HEXバイト列の HEX ダンプ
内容テキスト表現またはデコード済み文字列

種別フィルタ

ログペイン見出しの「種別」ドロップダウンを開くと、Tx / Rx / Heartbeat / System / Error / Proxy / Script のチェックリスト(先頭の「(すべて選択)」で一括 ON/OFF)で表示を絞り込めます(既定はすべて ON。絞り込み中はボタンに「種別 (n/7)」と件数を表示)。「Proxy」だけをオンにすると、中継パケット(方向・注入の有無)のみを一覧でき、旧来のキャプチャ専用タブと同等の表示になります。

ツールバーの操作

「クリア」ボタンで表示を消去します。「全行コピー」ボタンをクリックすると、現在の種別フィルタを適用した行のヘッダ行込みのタブ区切りテキストをクリップボードへコピーします(Excel への貼り付けに対応しています)。「シナリオとして保存」ボタンで現在のキャプチャ内容を .commscenario ファイルとして書き出せます(採取ログ記録オフ時も書き出せます)。

スタブ動作時の記録

転送先(上流)を設定していないセッション(スタブ動作)でも、すべての送受信がログペインに記録されます。

方向列の値スタブ動作時の意味
AppToDeviceテスト対象アプリ → CommSim(CommSim が受信したパケット)
DeviceToAppCommSim → テスト対象アプリ(オートメーション・バイナリ構造応答・手動送信で CommSim が送信したパケット)

中継動作時の AppToDevice は「テスト対象アプリ → 実機」、DeviceToApp は「実機 → テスト対象アプリ」を表します。

不具合再現の流れ(典型例)

実機でしか発生しない不具合を実機なしで再現するための典型的な手順です。

  1. プロキシモードで実機とアプリ間の通信を記録する
    転送先ありのセッションで実機との通信を中継し、ログペインの Proxy フィルタで方向・HEX・注入の有無を確認します。問題が発生したときのパケット列を特定します。
  2. 記録を保存・エクスポートする
    「全行コピー」でログ内容をクリップボードへコピーして Excel やテキストエディタに貼り付けるか、「シナリオとして保存」で .commscenario ファイルに書き出します。再現に必要なパケット列を整理します。
  3. スタブモードで記録した通信を再現する
    別に転送先なしのセッションを追加し、記録した通信内容をもとにオートメーション・バイナリ構造応答を構築します。以降は実機なしで同じ通信パターンを再現できます。

同じセッションで「一部だけフック」しながら残りは実機へ流す使い方もできます。実機が手元にない状況での完全な再現には、転送先なしのセッションを使います。

次に読む