mtping
2012年4月5日
mtpingの主な目的は、冗長化されたネットワークシステムにおいて、システムに障害が起きたときに迂回経路やバックアップ機器が有効になるまでの時間を計測することです。
mtpingは、指定された時間間隔(周期)ごとに、指定された宛先IPアドレスに向けてICMPエコー要求パケットを送信します。システムが正常なとき、mtpingは宛先ホストからのICMPエコー応答パケットを受信します。
システムに障害が生じたとき、迂回経路またはバックアップ機器が有効になるまで宛先ホストからのICMP エコー応答パケットが一時的に失われるでしょう。 mtpingは最後にICMPエコー応答を受信した時刻から、再びICMPエコー要求が到達した時刻までを計算して表示します。
---------------------------------------------------------------------- C:\>mtping 192.168.0.3 -p 100 -w 100 -n 100 mtping 192.168.0.3 -p 100 -w 100 -n 100 00:00:00.000 [1] reply from 192.168.0.3 ; rtt 0 ms. !!!!!!!!!!!!!!!!!!!!!!!!!!!! 00:00:02.900 [30] no reply. ............... 00:00:04.500 [46] reply from 192.168.0.3 ; rtt 0 ms. 16 request(s) have been lost since the last reply 1700 ms ago. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! mtping statistics Packets: Sent = 100, Received = 84, Lost = 16 (16.0 %) C:\> ---------------------------------------------------------------------- 【図 1-1】実行例1
【 構文 】
mtping <ipaddress> [-a] [-T] [-n <number>] [-p <number>] [-w <number>] [-Q <number>] [-o <file>] [-h]
<ipaddress> | 宛先ホストのIPアドレスを指定します。 必ずIPアドレスを一つ指定してください。 |
---|---|
-a |
すべてのICMPエコー応答パケットを受信したときにメッセージを表示します。 mtpingは"-a"オプションを使用しない限り、エコー要求に対する応答が変化したときにだけメッセージを表示します。同じ応答が連続しているときはその結果を一文字で表現します。 ! エコー応答を連続して受信している . エコー要求が連続してタイムアウトしている |
-T |
ICMPエコー要求パケットを送信した時刻を現在時刻で表示します。 mtpingは"-T"オプションを使用しない限り、エコー要求パケットを送信した時刻をプログラムが実行されてから経過した時間で表示します。 |
-n <number> |
送信するICMPエコー要求パケットの数を指定します。 指定できる範囲は0から"10の23乗 - 1"(4294967295)までです。0を指定したときは無制限にエコー要求を送信し続けます。既定値は3です。 指定した数のエコー要求をすべて送信する前にプログラムを中断したいときは、[Ctrl]+[c]で中断してください。 |
-p <number> |
ICMPエコー要求パケットを送信する周期を指定します。単位はミリ秒です。 指定できる範囲は0から1000までです。既定値は1000です。 周期には受信待ち時間を含みます。例えば、周期を100ミリ秒に設定したと仮定します。このとき、一つのエコー要求に対する応答が2ミリ秒後にあったとすると、次のエコー要求は前の応答を受信したときから98ミリ秒後に送信されます。 受信がタイムアウトするまでの待ち時間が周期よりも長く設定されている場合は、受信がタイムアウトするまでエコー応答を待ち、次のエコー要求は前のタイムアウト後、直ちに送信されます。 |
-w <number> |
ICMPエコー応答パケットを待つ時間を指定します。単位はミリ秒です。 指定できる範囲は1から5000までです。既定値は5000です。 ICMPエコー要求パケットを送信してから指定した時間以内にエコー応答がない場合はタイムアウトとし、次のエコー要求を送信します。 受信待ち時間がタイムアウトしたあとにエコー応答が到着した場合、mtpingは単にそれを破棄します。 |
-Q <number> |
ICMPエコー要求に対する結果が前の結果から変化した回数を指定してプログラムを停止します。 指定できる範囲は0から10までです。0を指定したときはこのオプションを無効にします。既定値は0です。 例えば、連続してエコー応答を受信していた状態から、タイムアウトが発生し、いくつかのエコー要求が失われた後、再びエコー応答が受信できたと仮定します。このとき、"-Q"オプションで1を指定していると、一つ目のタイムアウトが生じた時点でプログラムを停止します。もし、"-Q"オプションで2を指定していると、再びエコー応答が受信できた時点でプログラムを停止します。 |
-o <file> |
実行結果を指定されたファイルに出力します。 指定されたファイルが存在しない場合はファイルを作成し、指定されたファイルが存在する場合はファイルに追記します。 ファイルへ出力される内容は画面に表示される内容と同じテキストです。 ファイルへの出力は画面への表示と同時に処理されます。 |
-h |
オンラインヘルプを表示します。 |
mtpingは、一つのICMPエコー要求パケットを送信してから、次のパケットを送信するまでの待機時間が1ミリ秒単位で実行されるようにタイマーの精度を高めています。
ただし、コンピュータ(パソコン)の性能によっては指定した時間どおりに実効されない場合があります。
以下に、開発に使用したパソコンの仕様と実行例を示します。なお、以下に示す仕様は一つの例であり、動作を保証するものではありません。
【 パソコンの仕様 】 CPU: Intel Core i7-2600K Chipset: Intel Z68 Ethernet: Realtek RTL8111E on PCI-E Memory: 4GB DDR3-1333 x2 (Total 8GB) OS: Windows 7 Professional(SP1) ---------------------------------------------------------------------- C:\>mtping 192.168.0.253 -p 1 -w 1 -n 10 -a -o log.txt mtping 192.168.0.253 -p 1 -w 1 -n 10 -a -o log.txt 00:00:00.000 [1] reply from 192.168.0.253 ; rtt 1 ms. 00:00:00.001 [2] reply from 192.168.0.253 ; rtt 1 ms. 00:00:00.002 [3] reply from 192.168.0.253 ; rtt 0 ms. 00:00:00.003 [4] reply from 192.168.0.253 ; rtt 0 ms. 00:00:00.004 [5] reply from 192.168.0.253 ; rtt 0 ms. 00:00:00.005 [6] reply from 192.168.0.253 ; rtt 0 ms. 00:00:00.006 [7] reply from 192.168.0.253 ; rtt 0 ms. 00:00:00.007 [8] reply from 192.168.0.253 ; rtt 0 ms. 00:00:00.008 [9] reply from 192.168.0.253 ; rtt 0 ms. 00:00:00.009 [10] reply from 192.168.0.253 ; rtt 0 ms. mtping statistics Packets: Sent = 10, Received = 10, Lost = 0 (0.0 %) C:\> ---------------------------------------------------------------------- 【図 3-1】実行例2
実行結果に表示される時刻はICMPエコー要求を送信した時刻です。ICMPエコー応答を受信した時刻は送信時刻に"rtt (Round Trip Time)"を加えた時刻です。なお、受信がタイムアウトした時刻は表示されません。
Microsoft Windows Vista/7で実行するときは、コマンドプロンプトを管理者として実行してください。
mtpingはICMPエコー要求の送信間隔が1ミリ秒単位で動作するように精度を高めています。本プログラムを実行中に、同時に実行している他のアプリケーションの応答速度が低下するなどの現象が現れる場合は、本プログラムの使用を控えてください。
mtpingが送信するICMPエコー要求メッセージのサイズは、ICMPヘッダーを含めて26バイトです。mtpingはこのサイズを変更する機能を実装していません。
mtpingはICMPエコー要求とエコー応答以外のパケットをすべて無視します。
Q1 | pingコマンドは管理者権限がなくても実行できるのに、mtpingはなぜ管理者権限が必要なのですか? |
---|---|
A1 |
mtpingはWindows用のSocket APIに含まれているSocket()用いてRAW Socketを作成し、それを通じてICMPメッセージを含んだパケットを送受信しています。Windows NT以降ではRAW Socketを扱うために管理者権限が必要です。この為、Windows NT以降でmtpingを実行するときは管理者権限が必要になります。 なお、Windows用のICMP APIに含まれているIcmpCreateFile()を用いてハンドルを開き、それを通じてICMPメッセージを送受信する場合は管理者権限を必要としません。 |
Q2 | mtpingはなぜICMPエラーやリダイレクトメッセージを無視するのですか? |
A2 |
WindowsのRAW Socketはネットワークデバイスで受信したICMPエラーやリダイレクトメッセージをユーザーアプリケーションに渡しません。この為、mtpingではこれらのICMPメッセージを捕捉できません。 なお、ICMP APIに含まれているIcmpSendEcho()を使うと、関数の呼び出しから戻ったあと、関数の引数の一つである構造体ICMP_ECHO_REPLYの値を調べることでユーザーアプリケーションでICMPエラーが起きたことを知ることができます。ただし、IcmpSendEcho()でもTTL Expiredは検知できません。 |
Q3 |
mtpingはなぜICMP APIを使わずにSocket APIを使うのですか? |
A3 |
mtpingの主な目的は冗長化システムの切り替わり時間をできるだけ正確に計測することです。この主な目的を達成するためには、指定された極めて短い(数十ミリ秒)周期でICMPエコー要求を送信し、タイムアウトが発生すると直ちに次のエコー要求を送受する必要があります。 IcmpSendEcho()ではタイムアウトに指定した時間が極めて短いと、目標ホストからICMPエコー応答が届かない場合、指定した時間(タイムアウト)が経過しても直ちにユーザーアプリケーションに制御が戻らないことがあります。例えば、前出の開発機で実験した結果、タイムアウトとして100ミリ秒を指定してIcmpSendEcho()を実行しても、ICMPエコー応答がない場合、ユーザーアプリケーションに制御が戻ってくるのは関数を呼び出してから約500ミリ秒後でした。このようなことがある為、mtpingはICMP APIを使っていません。 |
Q4 | mtpingはなぜ相手先ホストのIPアドレスを一つに制限しているのですか? |
A4 |
1つのRAW Socketを通じて複数の相手先ホストとICMPエコーの送受信する場合、指定されたIPアドレスを一つづつ巡回して処理することになります。このようなアルゴリズムでは、周期より長いタイムアウトを指定すると、一つのIPアドレスでタイムアウトが起きた場合、後続のIPアドレスに対する送信の周期が乱れてしまいます。 複数の相手先ホストに対して同時にmtpingを実行したいときは、DOSバッチファイルを作成して実行してください。以下に例を示します。例に示した3行のコマンドを拡張子が.batのファイルに記述して、管理者として実行しているコマンドプロンプトで実行してください。 START cmd.exe /k "mtping 192.168.0.1 -n 100 -p 100 -w 50 -o mtping_192-168-0-1.log START cmd.exe /k "mtping 192.168.0.253 -n 200 -p 50 -w 50 -o mtping_192-168-0-253.log START cmd.exe /k "mtping 192.168.0.254 -n 200 -p 50 -w 50 -o mtping_192-168-0-254.log |
Q5 | 実行例1(図1-1)で通信できなかった時間が1700ミリ秒と表示されるのはなぜですか? |
A5 |
実行例1では、プログラムが起動してから2.9秒後に送信したICMPエコー要求に対する返答がありませんでした。ですが、その一つ前の2.8秒の時点で送信したICMPエコー要求には応答がありました。(表示はされていませんが、計算結果から考えてこのときのRTTは1ミリ秒未満であると推定されます。)そして、4.5秒の時点で送信したICMPエコー要求は相手ホストに届き、その応答を受けとりました。したがって、疎通が確認できていない範囲は2.8秒から4.5秒までの1.7秒(1700ミリ秒)になります。
もし、2.8秒の時点で送信したICMPエコー要求の応答が50ミリ秒後にあった場合(RTTが50ミリ秒だった場合)は、プログラム起動後2.85ミリ秒の時点までは疎通が確認されていますので、疎通が確認できていない範囲は2.85秒から4.50秒までの1.65秒(1650ミリ秒)になります。 |
【対象OS】
・ Microsoft Windows XP/Vista/7
ここから、本ソフトウェアを含んだファイルをダウンロードすることができます。
MD5 (mtping_0-9-7.zip) = 31a88f9b03e17fd8b8d99c053d9b14d6
このソフトウェアは、以下に記す「10 責任」に同意する限り、使用目的を問わず誰でも無料で使用することができます。
有限会社立志コンピュータは本ソフトウェアに関して、実行および実行結果など一切保証しません。
有限会社立志コンピュータはいかなる場合においても、ユーザが直接または間接的に被った損害、利益の喪失などについて、それらを賠償する責任を負いません。 これに同意されない場合は本ソフトウェアを使用しないでください。
本ソフトウェアの著作権はすべて有限会社立志コンピュータが保有しています。
著作権者の文書による承諾を得ずに、本記事の一部または全部を無断で複写・複製・転載することはできません。