7

そのサーバーからのインターネット接続があるかどうかを定期的に (数秒ごとに) 検証する単純なスクリプトがあります。明確にするために、外部サイト/サービス/サーバーが稼働しているかどうかを確認するつもりはありません。信頼できるインターネットの宛先として、Google、Yahoo などのサイトの IP を使用します。通常、3 つの宛先 (LAN、ISP ネットワーク、外部 ISP) を使用します。

これを担当する私の現在のコードは、次の単純で汚い呼び出しpingです。

    my $pingResponse = `ping -c 1 -w 1 123.123.123.123`;
    my $isConnected = parsePingResponse($pingResponse);

うまくいくようですが、このタスクを達成するための正しい/最良の方法ではないと確信しています。少なくとも 3 つの欠点があります。外部システム コール、遅い、デッドラインが 1 秒と比較的長い。

だから、私の質問は次のとおりです。インターネット接続が生きているかどうかを確認するために 、単純かつ効率的にping機能をperlishの方法で実装する方法は?

(LWP はやり過ぎだと思います。サイトやページが利用可能かどうかは重要ではありません。いくつかの外部 IP に到達できるかどうかだけです。おそらく、低レベルのネットワークを含む単純なものにする必要があります)

4

4 に答える 4

6

これを行うパーリッシュな方法はNet::Pingです。

my $p = Net::Ping->new;
if ($p->ping("123.123.123.123", 1)) {
    print "Host is reachable\n";
}

コマンドをより速く実行したい場合は、タイムアウトを浮動小数点数 (0.5 など) にすることができます。ニーズに合ったタイムアウトを選択する必要があります。タイムアウトが大きいほど、インターネット接続に関して正しい可能性が高くなりますが、時間がかかります。

于 2013-02-14T12:55:56.467 に答える