プロキシ(中継)を実機なしで試す
このサンプルは プロキシ(中継)モードを、上流の実機を用意せずに通しで試すためのものです。テスト対象アプリと実機の間に CommSim を挟み、往復をそのまま記録し、狙った 1 コマンドだけ偽装(フック)し、記録をシナリオ化して実機なしで再生するまでを一本の動線でたどれます。上流の実機役は CommSim.Sample の ② ペインが演じるので、実機は要りません。
TCP 7200 / 7201LineFrame中継・記録フック(偽装)シナリオ化実機不要
このページでできること
- 上流の実機を用意せずに中継(プロキシ)トポロジを立て、テスト対象アプリと実機役の往復をそのまま記録する。
- 記録を ログの種別フィルタ「Proxy」で時系列に確認し、LineFrame に再デコードされた中身を読む。
- 狙った 1 コマンドだけ偽装(フック)して、実機では起こしづらい異常系を意図的に注入する。
- 記録をシナリオ化して実機なしで再生し、持ち帰ってデバッグできるようにする。
- 最後に「自分の通信ではどう使うか」を判断フローで掴む。
登場人物(役割)と当てはめ
実機は要りません。① テスト対象アプリ役(CommSim.Sample の左ペイン)と ② 上流の実機役(CommSim.Sample の右ペイン)の間に、CommSim 本体=中継・記録が入る三者構成です。
このチュートリアルの構成 ↔ 実際の構成
| 役割 | このチュートリアルでは | 実際の現場では |
|---|---|---|
| ① テスト対象アプリ | CommSim.Sample の左ペイン(7200 へ接続) | 実際のテスト対象アプリ(接続先を CommSim に向ける) |
| 中継・記録 | CommSim 本体(下流 7200/上流 127.0.0.1:7201) | CommSim 本体(下流=アプリの接続先/上流=実機) |
| ② 上流の実機 | CommSim.Sample の右ペイン(7201 で待受・正常応答) | 実際の実機(PLC・センサ等) |
proxy-relay.commsim の「接続」タブ。下流=ポート 7200 で受け、「転送先(上流)へ中継する」を ON にして上流=127.0.0.1:7201(=②)へ転送する中継構成。ヘッダが「中継(プロキシ)として動作 — フック 0 件」=純素通し中継であることを示す(ステップ B でここが「フック 1 件」になる)。用意するもの
| ファイル | 内容 |
|---|---|
proxy-relay/proxy-relay.commsim | 中継(プロキシ)セッションのプロジェクト(下流 TCP 7200 待受/上流 127.0.0.1:7201 へ転送・LineFrame 構造体定義つき・ルール/オートメーションは空=純素通し中継) |
proxy-relay/proxy-relay.commsim-struct | LineFrame 構造体定義のみの可搬ファイル(別プロジェクトへのインポート用) |
proxy-relay/logs/sample-proxy-relay.commsimlog | 中継往復を記録した採取ログ(起動せずログビュワーで眺める用) |
proxy-relay/scenarios/proxy-relay.commscenario | 同じ往復を双方向シナリオ化したもの(ステップ C を録画工程なしで試す用) |
これらは CommSim.Sample の実行フォルダ内 samples/proxy-relay/ に同梱されています。必要なのは CommSim 本体と CommSim.Sample の 2 本だけで、上流の実機は不要です(② 役を CommSim.Sample が演じます)。
ステップA:すぐ中継して記録を見る(まず動かす)
まずは中継を立てて、往復が記録される様子を見ます。起動の順番が大切です(②→本体→① の順)。上流の ② が先に待ち受けていないと、中継はその起動時に黙ってスタブ動作に退化してしまうためです。
- CommSim.Sample を起動し、上部の「動かすサンプル」で「プロキシ(中継)」を選ぶ。① ペインが 7200・② ペインが 7201 になり、② の自動応答が ON になる。
- 先に ② 実機役を起動する(② ペインの「起動」=7201 で待受開始。上流の実機が先に立っている状態にする)。
- CommSim 本体で
samples/proxy-relay/proxy-relay.commsimを開く(「ファイル」→「ファイルから開く…」/Ctrl+O)。 - セッション「中継(プロキシ)TCP 7200 → 7201」の「起動」をクリックする。下流 7200 で待ち受け、上流 127.0.0.1:7201(=②)へ接続する。上流未接続の警告バナーが出ないことを確認する(出る場合は ② が未起動)。
- CommSim.Sample の ① ペインの「起動」(接続)→「デモ送信」を押す。① が Read/Status を連投し、CommSim 本体が ② へ転送 → ② が応答 → ① へ中継する。
- CommSim 本体の「ログ」タブで、種別フィルタの「Proxy」だけを ON にする。中継の往復が時系列に記録されているのが見える(行をクリックすると LineFrame に再デコード表示)。
観察できること
- ▶下流→上流 転送:Read ch0(① → 本体 → ②)AppToDevice
- ◀上流→下流 中継:値100(② → 本体 → ①)DeviceToApp
- ▶下流→上流 転送:Status?(① → 本体 → ②)AppToDevice
- ◀上流→下流 中継:OK(② → 本体 → ①)DeviceToApp
A5 01…=Read/A5 02…=Status)が「下流→上流 転送」で②へ送られ、②の応答(A5 81 02 00 64 8C=値100/A5 82 01 00 28=OK)が「上流→下流 中継」で①へ返る。純素通しなので CommSim は中身を変えず記録だけしている(行をクリックすると LineFrame に再デコード表示)。うまく往復が出ないときは、まず起動順(②→本体→①)と、本体に上流未接続の警告バナーが出ていないかを確認してください。
ステップB:狙った 1 コマンドだけ偽装する(フック)(オプション・目安 10 分)
先に効果を言うと:このステップを終えると、① のログで Status(A5 02)だけが偽の異常応答に変わり、Read(A5 01)は実機の応答のまま素通しになります。「実機 99% + 狙った 1% だけ偽装」を、ルールを 1 つ足すだけで体感できます。
CommSim 本体のセッションで「オートメーション」タブを開き、次の内容でパケット一致オートメーションを 1 つ追加します。
| 項目 | 値 |
|---|---|
| トリガー種別 | パケット一致(PacketMatch) |
| 一致方法 | 前方一致(先頭一致) |
| 一致データ形式 | HEX |
| 一致データ | A5 02(Status 要求の先頭・スペース区切りで入力) |
| 送信ステップのアクション | Send(送信) ※ Forward ではない |
| 送信データ形式 | HEX |
| 送信データ | A5 82 01 0E 36(異常 Status フレーム=Stx A5・Cmd 82・Len 01・Payload 0E〔エラー〕・Sum8 36) |
追加して ① で再度「デモ送信」すると、① のログでは Status の応答だけが A5 82 01 0E 36(異常)に変わり、Read の応答は実機どおり A5 81 02 00 64 8C(値100)のままです。偽装が効いていることは、本体セッションのログで次のように確認できます。
- ヘッダの状態ラベルが「中継として動作 — フック 1 件」になる。
- Status 受信の直後に「オートメーション開始: …」→「[AUTO] 送信: A5 82 01 0E 36」→「オートメーション終了」が並ぶ(偽装応答はオートメーションが送出した
[AUTO]行として記録される)。 - 一方 Read は
Proxy「下流→上流 転送」→Proxy「上流→下流 中継」のまま実機(②)へ素通しされる。②側のログには Status(A5 02)が一切届かず、Read(A5 01)だけが届く(フックが上流転送を先に抑止したため)。
A5 01)は Proxy「下流→上流 転送」→「上流→下流 中継」で実機②へ素通しされ A5 81 02 00 64 8C(値100)が返るが、Status(A5 02)は オートメーション開始: Status フック → [AUTO] 送信: A5 82 01 0E 36(偽装異常)に差し替わる。「実機 99% + 狙った 1% だけ偽装」が 1 行のルールで実現できている。※「注入」列のチェック(✓)が付くのはバイナリ構造応答(構造体ルール)でフックした場合です。本ステップのようにオートメーションの Send で差し替えた応答は [AUTO] 行として区別します。
A5 02(Status)はマッチして Send が返り、上流転送が抑止されます。A5 01(Read)はどのルールにもマッチしないので、そのまま実機(②)へ転送されます。アクションは必ず「Send」にしてください。「Forward」は受信をそのまま上流へ転送する指定なので、偽装になりません。
ステップC:記録を持ち帰る(シナリオ化)(オプション・目安 5 分)
記録した往復はシナリオ(.commscenario)として保存でき、実機なしで何度でも再生できます。実機でしか出ない通信を 1 度プロキシで録画すれば、以降は実機を借りずにデバッグを反復できます。
- 中継したセッションの「リプレイ/障害注入」タブを開き、「シナリオとして保存」をクリックする。記録した中継往復が
.commscenarioに変換される。 - 保存した
.commscenarioを、別のスタブセッション(上流なし)か、リプレイ用のプロジェクトで開いて「再生」する。実機なしで往復が再現される。
なお、中継中(上流あり)のセッションそのものでは再生できません(リプレイは上流なしのセッションで行います)。同梱の
scenarios/proxy-relay.commscenario を使えば、録画工程を飛ばしてすぐ再生を試せます。自分のケースへの当てはめ方
このサンプルの流れを、自分の通信に応用するときの判断の糸口です。
| 問い | はい | いいえ |
|---|---|---|
| 上流の実機は手元にあるか? | そのまま中継先(上流)に実機のホスト/ポートを指定する | CommSim.Sample(または別の CommSim スタブ)を実機役にする(このサンプルと同じ) |
| 記録するだけか、狙い撃ちで偽装もするか? | パケット一致フック(アクション=Send・先勝ちで上流転送を抑止)を足す | 純素通し中継のまま(ルール空)で全往復を記録する |
| 記録を再利用するか? | 「シナリオとして保存」→ リプレイ(→ 将来はリプロパックで共有) | ログ/キャプチャの確認・エクスポートだけでよい |
次に読む
- 中継とキャプチャ — 中継・キャプチャ・フック・注入列の詳細(設定の正)
- リプレイ/障害注入を試す — 記録をシナリオ化したあとの深掘り(障害注入・決定論再生)
- オートメーション — パケット一致トリガー・送信ステップ(Send/Forward)の詳細
- ← チュートリアル一覧に戻る