この「コマンド活用テクニック編」では,「基本6大コマンド編」で身につけたWindowsに備わるネットワーク・コマンドを駆使して,ネットワークを運用・管理をする場面で実際に役立つテクニックを紹介する。今回はping(ピング)コマンドの活用術を紹介しよう。一発のコマンドを実行するだけで,192.168.0.1~254といった複数のIPアドレスあてのpingパケットを送り,応答があるかどうかを調べる。LANにどれだけ機器がつながっていて,どのIPアドレスの機器が稼働中かわかる。

稼働中かどうかを調べるping

 pingは,ICMP*というIPネットワークの障害通知用プロトコルを使うコマンドである。その名称は潜水艦のアクティブ・ソナー音(「ピーン」という音)に由来すると言われている*

 Windowsマシンならコマンド・プロンプト*を開き,IPアドレスを指定して実行すると,そのアドレスが割り当てられた機器から応答が返ってくる。例えば,

ping 192.168.0.1

のように実行する。調査対象はWindowsマシンでなくてもかまわない。MacやUNIX,はたまたルーターやネットワーク・プリンタなど,IPアドレスを持っていればどんな機器からでも応答が返ってくる。

 実際にpingを実行すると,目的のIPアドレスの端末に対してICMPエコー要求というメッセージを送る。これを受け取った端末は応答を返すことになっている。つまり相手が動いていれば,ICMPエコー応答が返ってくる。一定時間待っても応答がなければ,相手の端末が動作していないか,未使用のIPアドレスだと判断できる。

オプションを指定して時間短縮

 個別にIPアドレスを指定して,pingコマンドを実行すれば,稼働中のものだけが応答を返してくるので,これを繰り返せば稼働中の機器が使っているIPアドレスがわかる。しかし,これでは時間がかかる。


図1 オプションを使ってタイムアウト時間や送出パケット数が指定する
LANにつながるコンピュータ1台ずつに対してpingコマンドを実行する時間を短縮するために,オプション・パラメータを指定する。これで,pingパケットを1回しか送信せず,結果が表示されるまでに待つ時間が短くなる。

[画像のクリックで拡大表示]

図2 1行のコマンドでLAN内の全端末にpingコマンドを実行する
forループ・コマンドを使ってpingコマンドを連続して実行するようにする。

[画像のクリックで拡大表示]

 pingコマンドを1回実行すると,デフォルトではICMPエコー要求パケットが4回送られ,応答も4回返ってくる(図1[拡大表示](1))。応答がないときは,標準で1秒間待ってから「Request timed out.」というメッセージを表示する。遠距離にある端末を調べたりすることを想定して,長めに待つようにしているからである。

 ただし,同じLANにつながる機器が稼働中かを調べるなら,ここまでていねいに調査する必要はない。LAN内の端末なら1回のICMPエコー要求に確実に応答するし,エコー応答も数ミリ秒で戻ってくる。したがって,ICMPエコー要求は1回送るだけで済ませ,タイムアウト時間を50ミリ秒程度にする。こうすれば,1回当たりのコマンド処理時間を短くできる。

 それには,pingコマンドのオプション・パラメータを使う(図1(2))。pingと記述した後ろに,「-n 1」と書いてICMPエコー要求パケットを1個だけ送出するように指定し,「-w 50」でタイムアウト時間を50ミリ秒に指定する。

forループ文で1行コマンドに

 というわけで,調べたいアドレス範囲に対して,図1(2)のようなコマンドを繰り返し実行していけば,目的は達成できる。だが,調べたいIPアドレスの数が多いとこれでも大変。

 例えばサブネット・マスク*が「255.255.255.0」のIPネットワークなら,全部で254回*,コマンドを繰り返して実行しなければならない。

 そこで,ちょっとした呪文を使って作業を楽にしよう。ここで使うのは,forコマンドである(図2[拡大表示])。forコマンドは,do以降に記述したコマンドをinの後ろ()内に書いた条件で繰り返して実行する。この場合は「%f」という変数を1~254まで1刻みで増やしながら,do以下のコマンドを実行する。つまり,図2の例では192.168.0.1~192.168.0.254までのIPアドレスをあて先にして順番にpingコマンドを実行していく。