1 #! /usr/bin/perl -w 2 3 sub ping { 4 my $ip = shift || die "ping: no ip provided\n"; 5 my $debug = shift || 0; 6 7 my $TIMEOUT = 5; 8 my $remaining = 0; 9 my $result = 0 ; 10 11 print LOG "ping v 1 entry IP $ip debug $debug\n" if $debug; 12 my @lines; 13 eval { 14 local $SIG{ALRM} = sub {die "alarm\n"} ; 15 alarm $TIMEOUT ; 16 @lines = split /^/m,`ping -n -W 2 -c 5 -i 0.2 -w 1 $ip`; 17 $remaining = alarm 0; 18 print LOG "ping($ip): remaining $remaining\n" if $debug; 19 }; 20 if($@) { 21 print LOG qq{ping("$ip"): timed out\n} if $debug; 22 return 0; 23 } 24 for my $line (@lines) { 25 if($line =~ /Host Unreachable/o) { 26 print LOG qq{ping($ip): Host Unreachable\n}; 27 last; 28 } 29 print LOG " ping: $line" if $debug; 30 if($line =~ / from $ip/) { 31 $result++; 32 } 33 } 34 if($result > 2) { 35 printf LOG "ping($ip): returning result $result\n" if $debug; 36 return $result; 37 } else { 38 printf LOG "ping($ip): returning result 0\n" if $debug; 39 return 0; 40 } 41 } 42 43 1; 44