Net::Ping - リモートホストの生存確認
Net::Pingモジュールを利用すれば、リモートホストの生存を確認することができます。
# モジュールの読み込みとオブジェクトの作成 use Net::Ping; my $p = Net::Ping->new;
リモートホストの生存を確認するにはpingメソッドを使用します。引数にはホスト名(ドメイン名)とIPアドレスを使用することができます。
# リモートホストの生存確認 my $alive = $p->ping('localhost');
少し注意して欲しいことがあるのですが、Net::Pingのpingメソッドはpingコマンドの代替ではありません。pingコマンドICMPというプロトコルを使用しますが、Net::PingはデフォルトではTCPプロトコルを使用して、エコーポート(ポート番号は7)に対して生存確認を行います。たとえばHTTP(ポートは80)でリモートホストに接続できたとしても、セキュリティ上の理由でエコーポートを閉じていれば、生存していないという判定が返ってきます。
ICMPを利用した生存確認を行うには、コンストラクタでicmpを指定します。ただしこれを行うにはroot権限が必要になります(※1)。
# ICMPを利用した生存確認 my $p = Net::Ping->new('icmp'); my $alive = $p->ping('somehost');
HTTPで生存確認を行いたい場合はport_numberメソッドを使用してポート番号に80を指定します。(v5.10.0以降)
# HTTPを利用した生存確認 $p->port_number(80); my $alive = $p->ping('www.google.co.jp');
pingメソッドの第二引数にはタイムアウト値(秒)を指定することができます。
# タイムアウト値の指定 my $alive = $p->ping('www.google.co.jp', 2);
ドキュメント
注
※1 root権限がなければ生存確認できないのは少し不便です。CPANにはNet::Ping::Externalというモジュールがあり、これはpingコマンドのPerlインターフェースになっています。これを利用すれば、root権限なしてICMPを利用して生存確認を行うことができます。