step4 ping / traceroute をリモートコントロール(exp_remote_manager / exp_remote_agent)


ping / traceroute 用 PC の台数が増えてくると、PC の操作に手間がかかり、テンポよくテストを進めることが難しくなってきます。1人で20台の PC の ping/traceroute の開始/停止を操作するのは悪夢といって良いでしょう。ここでは複数の PC の ExPing をリモートからコントロールするツールについて書きます。




リモートから複数の PC の ping / traceroute (ExPing) の開始/停止をコントロールするために exp_remote_manager / exp_remote_agent というツールを作りました。

http://www.ne.jp/asahi/yam/tools/exp_remote_tool.zip


agent / manager 双方で準備が必要になりますので説明して行きます。


exp_remote

PC1(192.168.0.1) と、PC2(192.168.1.1) 間の疎通が実際にテストしたい通信要件です。




環境

  • PC1,2 には ExPing をインストールしておきます。
  • それぞれの PC は可能であればコントロール用の NIC を追加しておきます。

このコントロール用のネットワークで exp_remote manager & agent を動かしたり、ログの回収を行ったりします。テストしている側のネットワークで行っても良いのですが、障害テスト時の到達性の問題や、ネットワーク中のフィルタの問題等があって扱いづらいので、コントロール用ネットワークを構築しておくのがオススメです。




agent 側の準備 1

  • ping / traceroute を行う宛先 IP を記載した宛先リストを作成

これは ExPing が起動する際に引数として与えられますので、ExPing が読み込める形式で作成します。テキストファイルで作成しても良いですし、ExPing を起動して、"対象" タブに IP を羅列して、"名前をつけて保存" しても良いです。

また、宛先リストに対する .#CONFIG# ファイルが適切である必要があります。ExPing の "環境" タブを適切に設定して、"名前をつけて保存" を行うと、宛先リストと同じフォルダに .#CONFIG# が生成されます。

  • 宛先リストのファイル名は自由に付けられます。
  • 宛先リストは ExPing.exe と同じフォルダにある必要があります。

複数の ExPing を同時に操作したい場合は、複数の宛先リストとそれぞれの .#CONFIG# ファイルを作っておきます。



図中 PC1 の宛先リスト "C:\Program Files\exp133\to_PC2.txt" です。これは PC1 の中にあります。

192.168.0.2 #PC2



図中 PC2 の宛先リスト "C:\Program Files\exp133\to_PC1.txt" です。これは PC2 の中にあります。

192.168.0.1 #PC1




agent 側の準備 2

exp_remote_agent を起動します。引数は下記のとおりです。

  • 第一引数 : exp_remote_manager からの指示を待ち受ける IP
  • 第二引数 : exp_remote_manager からの指示を待ち受ける port
  • 第三引数 : 自身の PC 名(ログファイル名に利用される)
  • 第四引数 : ExPing の path
  • 第五引数 : ログの保存場所



図中 PC1 の agent 起動コマンドラインです。

exp_remote_agent_***.exe 10.0.0.1 1024 PC1 "C:\Program Files\exp133\ExPing.exe" "C:\Program Files\exp133\log"



図中 PC2 の agent 起動コマンドラインです。

exp_remote_agent_***.exe 10.0.0.2 1024 PC2 "C:\Program Files\exp133\ExPing.exe" "C:\Program Files\exp133\log"



補足

宛先リストは manager 側で指定するので、agent の起動引数には登場しません。この仕様は謎に見えるかもしれませんが、agent 側に複数の宛先リストを持たせておいて、manager 側で選択するという利用方法を想定しています。




manager 側の準備

agent PC の list を作成します。path やファイル名は自由に決定できます。 下記の情報を ",(カンマ)" で区切って羅列します。

  • agent PC の 待ちうけ IP
  • agent PC の 待ちうけ port
  • agent PC で ExPing を起動する際の宛先リスト

図中 manager PC に作成された "c:\PC_list.txt" というテキストファイルの中身は下記になります。

10.0.0.1,1024,to_PC2.txt
10.0.0.2,1024,to_PC1.txt



複数の ExPing を操作する場合は、宛先リストを羅列します。たとえば下記のような感じです。

10.0.0.3,1024,to_PC1.txt,to_PC2.txt,to_PC10.txt




ping / traceroute の実行

お疲れ様でした。ようやく準備が整いました。 manager から agent をコントロールしてみましょう。



ping 開始

exp_remote_manager_***.exe "c:\PC_list.txt" ping testcase_1-1-1_ping
  • 第一引数 : agent PC のリストファイル
  • 第二引数 : "ping"
  • 第三引数 : ログファイル名

manager で上記を実行すると、

PC1 では to_PC2.txt を引数として ExPing が起動し ping を開始します。このとき、指定されたログフォルダに testcase_1-1-1_ping_PC1_to_PC2.txt というファイルを作って ping 結果を書き込んで行きます。

PC2 では to_PC1.txt を引数として ExPing が起動し ping を開始します。このとき、指定されたログフォルダに testcase_1-1-1_ping_PC2_to_PC1.txt というファイルを作って ping 結果を書き込んで行きます。

ログファイル名生成のルールは "manager 起動時に指定した文字列 + _ + agent 起動時に指定した PC 名 + _ + ExPing の引数になった宛先リストのファイル名" です。


生成されるログファイルと同名のファイルがすでに存在する場合は ping 結果を追記していきます。



ping 停止

exp_remote_manager_***.exe "c:\PC_list.txt" stop
  • 第一引数 : agent PC のリストファイル
  • 第二引数 : "stop"



traceroute 実施

exp_remote_manager_***.exe "c:\PC_list.txt" trace testcase_1-1-1_trace
  • 第一引数 : agent PC のリストファイル
  • 第二引数 : "trace"
  • 第三引数 : ログファイル名

manager で上記を実行すると、

PC1 では to_PC2.txt を引数として ExPing が起動、traceroute を実行し、終了すると指定されたログフォルダに testcase_1-1-1_trace_PC1_to_PC2.txt というファイル名で traceroute の結果を保存します。

PC2 では to_PC1.txt を引数として ExPing が起動、traceroute を実行し、終了すると指定されたログフォルダに testcase_1-1-1_trace_PC2_to_PC1.txt というファイル名で traceroute の結果を保存します。

ログファイル名生成のルールは "manager 起動時に指定した文字列 + _ + agent 起動時に指定した PC 名 + _ + ExPing の引数になった宛先リストのファイル名" です。


生成されるログファイルと同名のファイルがすでに存在する場合は上書きします。注意してください。




このツールについての補足です。

このツールは他のツールとちがって vector で公開していません。理由は、"CLI で UI がいかつい"、"準備が大変で使い手を選ぶ"、"UAC や windows firewall など、セキュリティの機能を停止しないと動かない場合がある"、"例外処理をあまりちゃんと書いていない"、"外部からの GUI 操作では不明な失敗がよく発生する"、といったもので、ネガティブな要素が多く実用性はぎりぎりというのが正直なところです。とはいえ、"それでも手作業よりはかなりマシ" という感覚もあり公開しています。



動作しない場合

  • "Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ" をインストールする。
  • windows firewall を無効にする。
  • UAC を無効にする。

また、agent 側ではマウスカーソルが ExPing の window 上にあると、"traceroute結果の保存" で躓くという問題があったため、PC 画面の最右下の位置をクリックするという動作が途中に入ります。デフォルトの windows デスクトップではここをクリックしても問題ありませんが、タスクバーをカスタマイズしているような場合は注意してください。


traceroute に失敗するケースの対処

ほとんどの失敗は timeout 系のエラーです。remote_manager は agent からのリプライを default で 300 sec 待つ仕様になっています。ですが、下記のようなケースで、300sec では traceroute が終わらない場合があります。

  • traceroute の宛先が多い
  • icmp timeout を長く設定している
  • traceroute オプションで最大HOP数を長く設定している

こうしたケースでは、exp_remote_manager フォルダにある、exp_remote_manager.ini の socket_idle_timeout の数値を大きくしてみてください。


ping の停止に長時間かかる / 停止できない

timeout による NG が発生している ExPing を停止させるのに長時間かかってしまうようです。現時点ではこのケースに対応できていません。開いている ExPing が 5 以下なら待ってもそう長くは無いと思います。開いている ExPing が多くなると長時間待たされます。

1 agent で複数の ExPing を起動している場合、上記のような理由などから、stop を送ってもいくつか ExPing の window が残ってしまうケースがあります。こうした場合、もう一度 stop を送ってみてください。


exp_remote_manager が固まる

固まっているように見えますが、ほとんどの場合 remote_agent からのリプライを待っています。remote_agent 側で 処理に時間がかかっているか、問題が発生して処理が途中で終わっているケースで remote_manager が待たされてしまいます。そうした場合、remote_manager は default で 300sec で timeout します。待てない場合、taskmgr から kill してください。

agent 側で問題があった場合、下記を実施してやり直してください。

  • 手作業で ExPing を終了させる
  • remote_agent を再起動させる
  • ゾンビ process がいないことを確認する

ExPing の window は見えないものの、process が残っているケースがあります。そうした場合は taskmgr で確認してゾンビ process を kill してください。

social