Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発
  1. Perl
  2. モジュール
  3. here

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を利用して生存確認を行うことができます。