#!perl use strict; use warnings; $|++; use Getopt::Long; use Net::Ping; use Win32::Sound; my $sleep = 60; my $conteggio = 4; my $echook = ( $conteggio - 1 ); my $alarmnum = 3; my $sound; my $volume = 100; my $timeout = 2; my $host; &aiuto() if ( !GetOptions('ip=s' => \$host, 'sleep=i' => \$sleep, 'conteggio=i'=>\$conteggio, 'ok=i' => \$echook, 'timeout=i' => \$timeout, 'alarm=i' => \$alarmnum, 'play=s' => \$sound, 'volume=i' => \$volume, ) or ! $host ); $timeout = 2 if $timeout < 1; $alarmnum = 3 if $alarmnum < 1; if ( $echook > $conteggio ){ $echook = $conteggio-1 } if (defined $sound && !(-e $sound)) {$sound = 'crow.wav'} ################################################################################ while (1){ sleep $sleep; my $ok = &controlla($host); if ($ok < $echook){ for (1..$alarmnum) { &suona() } print " ERROR !\n"; } else {print " OK $host\n";} } ################################################################################ sub controlla{ my $host = shift; my $p = Net::Ping->new("icmp"); my $ok = 0; foreach my $try (1..$conteggio) { print ($p->ping($host, $timeout) ? (++$ok and '.') : 'X' ); sleep(1); } $p->close(); return $ok; } ################################################################################ sub suona { if (defined $sound && -e $sound) { Win32::Sound::Volume($volume,$volume); Win32::Sound::Play($sound); } else {sleep 1; print"\a\a"} } ################################################################################ sub aiuto { print <