2

特定のホストの pingtime を返す小さなスクリプトを作成しています。これまでのところ、すべてが正常に機能していますが、失われたパケットの数を確認できるようにしたいと考えています。

Windows コマンド プロンプトで標準の ping コマンドを実行すると、次のような結果が得られます。

Ping-statistic for 173.194.70.138:
Packets: Sent = 4, Received = 4, Lost = 0 (0%)

パケットが失われるたびに perl をカウントするにはどうすればよいですか? perl 内で Windows コマンドを呼び出す方法はありますか?

以下の私の現在のコード:

#!/usr/bin/perl
use warnings;
use strict;

use Time::HiRes;
use Net::Ping;

use vars qw($ARGV $ret $duration $ip);

my $host    = $ARGV[0] or print "Usage is: $0 host [timeout]\n" and exit 1;
my $timeout = $ARGV[1] || 5;
my $p  = Net::Ping->new('icmp', $timeout);

if ($p->ping($host)) {
    $p->hires();{
($ret, $duration, $ip) = $p->ping($host);
    printf("$host [ip: $ip] is online (packet return time: %.2f ms)\n", 1000*$duration);
  }  

$p->close();  

}else{
     print "No such host, timeout of $timeout seconds reached\n";
}

前もって感謝します!

4

1 に答える 1

1

ホスト名が見つからないか、IP 番号に問題がある場合、返される成功フラグは undef になります。それ以外の場合、成功フラグは、ホストに到達できる場合は 1 になり、そうでない場合は 0 になります。

、、または$p->pingを返すことができますundef10

my $lost = 0;
my $n = 10;
while ($n--) {
  # die if ping returns undef
  my $ok = $p->ping($host) // die "No such host, timeout of $timeout seconds reached\n";
  $lost++ if !$ok;
}
print "$lost lost packets\n";
于 2013-08-13T09:44:07.207 に答える