Ovenfornævnte metode som erikjacobsen benytter, er et shell-escape... Dette er dyrt (ressourcemæssigt) at lave, og desuden ikke portabel kode !
her er et stykke grimt, hurtigt sammenbixet kode der virker med Net::Ping på en FreeBSD æske. Jeg har inkluderet Time::HiRes modulet for at kunne udføre meget præcise sekundberegninger...
Om det virker på en Linux / NT æske også aner jeg ikke.
PS: du skal være root for at benytte icmp metoden !
------------------ snip -------------------------
#!/usr/bin/perl
use Net::Ping;
use Time::HiRes qw( gettimeofday tv_interval usleep); ## for nøjagtig tidsberegning
$p = Net::Ping->new(\"icmp\");
$host=\"
www.chaos.dk\";$ant=10; $wait=1;
$min=10000; $max=0; $pk=0; $sum=0;
for ($i=1; $i<=$ant; $i++)
{
$a=[gettimeofday];
if ($p->ping($host, 1))
{
$b= 1000 * tv_interval( $a,[gettimeofday]);
#print \" ($b ms)\\n\";
print STDERR \".\";
$sum=$sum+$b; $pk++;
$max=$b if ($b>$max);
$min=$b if ($b<$min);
}
else
{
print STDERR \"!\";
}
usleep($wait*1000);
}
print STDERR \"\\n\";
if ($pk == 0)
{
print STDERR \"$host is NOT pingable\\n\";
}
else
{
$avg=sprintf(\"%5.3f\",$sum/$pk);
$pl=int(($ant-$pk)/$ant*100);
print STDERR \"--- $host ping statistics ---\\n\";
print STDERR \"$ant packets transmitted, $pk packets received, $pl% packet loss\\n\";
print STDERR \"round-trip min/avg/max = $min/$avg/$max ms\\n\";
}
$p->close();
------------------ end snip -----------------------