この「コマンド活用テクニック編」では,「基本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アドレスがわかる。しかし,これでは時間がかかる。
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コマンドを実行していく。