2013-08-13 5 views
2

Я пишу небольшой скрипт, который возвращает pingtimes для данного хоста. Пока все работает так, как должно, но хотело бы видеть, сколько потерянных пакетов.Подсчет потерянных пакетов с perl

При выполнении стандартной команды звона в течение окна командной строки вы получите что-то вроде этого:

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

Как я могу сделать Perl подсчет каждый пакет теряется? Есть ли способ вызвать команды windows в perl?

Мой текущий код ниже:

#!/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"; 
} 

Заранее спасибо!

ответ

1

Если имя хоста не найдено или существует проблема с номером IP, флаг успеха, который будет возвращен, будет undef. В противном случае флаг успеха будет равен 1, если хост доступен, а 0 - нет.

так $p->ping может вернуться undef, 1 или 0

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"; 
Смежные вопросы