Close
1 #!/usr/bin/perl -w 2 # INCLUDES 3 use strict; 4 use Net::Telnet; 5 use Mail::Sendmail; 6 use Getopt::Std; 7 8 # CONSTANTS 9 my $timeout = 5; 10 my $monikeraddr = '[email protected]'; 11 my $smtpserver = 'core.iconnet.net'; 12 13 my $services = { 14 ftp => { port => 21, print => "", waitfor => '/220/' }, 15 ssh => { port => 22, print => "", waitfor => '/SSH/' }, 16 telnet => { port => 23, print => "", waitfor => '/(login|username)/' }, 17 www => { port => 80, print => "HEAD / HTTP/1.0\n\n", waitfor => '/200/' }, 18 pop => { port => 110, print => "", waitfor => '/\+OK/' }, 19 nntp => { port => 119, print => "", waitfor => '/200/' }, 20 imap => { port => 143, print => "", waitfor => '/OK/' }, 21 smtp => { port => 25, print => "", waitfor => '/SMTP/' } 22 }; 23 24 # MAIN 25 my %opts = (); 26 getopt('hse', \%opts); 27 die "Usage: moniker -h host -s service [-e email]" 28 unless exists($opts{h}) && exists($opts{s}); 29 die "Service $opts{s} does not compute.\n" 30 unless defined $services->{$opts{s}}; 31 32 my $service = $opts{s}; 33 my $host = $opts{h}; 34 my $email = $opts{e} if exists $opts{e}; 35 my $port = $services->{$service}->{port}; 36 my $sock = new Net::Telnet (Telnetmode => 0); 37 my $waitfor = $services->{$service}->{waitfor}; 38 39 # Create a connection to the remote host 40 eval { 41 $sock->open(Host => $host, 42 Port => $port, 43 Timeout => $timeout 44 ); 45 }; 46 47 # Catch any errors 48 &alert("Cannot establish a connection to specified host") if $@; 49 50 # send data to remote host 51 $sock->print($services->{$service}->{print}) if $services->{$service}->{print}; 52 53 # wait for regex match 54 &alert("Timed out waiting for $waitfor") unless $sock->waitfor($waitfor); 55 56 print "Service is operational.\n" unless exists($opts{e}); 57 58 # SUBROUTINES 59 sub alert { 60 my $error = shift; 61 my $message = <<MESSAGE; 62 Moniker Alert 63 ------------- 64 Host: $host 65 Port: $port 66 ------------- 67 $error 68 MESSAGE 69 70 print "$message"; 71 if (exists($opts{e})) { 72 sendmail(To => $email, 73 Subject => 'Moniker Alert', 74 From => $monikeraddr, 75 Message => $message, 76 Server => $smtpserver, 77 delay => 1, 78 retries => 5) 79 || die "Cannot send mail: $Mail::Sendmail::error\n"; 80 } 81 exit; 82 }