jose_m:
Use Socket or IO::Socket to try to connect to the computer, and see if it works or not.
...roboticus
When your only tool is a hammer, all problems look like your thumb.
| [reply] [Watch: Dir/Any] |
Here is a start for you. But I believe netcat will tell you if it can't connect. Why not run netcat thru some IPC. Or use a netcat written in Perl, see netcat.pl
#!/usr/bin/perl
use IO::Socket;
$addr = '192.168.0.1';
$port = '80';
$socket = eval {
return IO::Socket::INET->new( Proto => "tcp",
PeerAddr => $addr,
PeerPort => $port,
Reuse => 1,
Timeout => 10)
or return undef;
};
if ($socket) {
print "Port open\n";
eval { return $socket->close; };
return 1;
} else {
print "Port NOT open\n";
return undef;
}
| [reply] [Watch: Dir/Any] [d/l] |
sweet..thank you both. i added a few things, i am going to use nslookup to get the ips, then i am putting them into an array and looping through that. this way i dont have to modify the script when the ip changes. also this script needs to return and exit status for nagios it will be part of the monitoring framework..
here is what i came up with, it runs fine, but i am open for suggestions..
#!/usr/bin/perl
#nagios return codes: 0->All Good, 2->Critical
use Net::Nslookup;
use Socket;
#global var. exit status#
$exit_status = 0;
sub GetIps {
#here we are getting the ip addresses and populating the ip array
@ips;
@ips= nslookup(domain =>"google.com");
}
sub FirstCheck {
foreach (@ips)
{
$socket = new IO::Socket::INET->new(PeerAddr => $_,
PeerPort => '777',
Proto => 'tcp',
Timeout => 2,
)
or print "could not create bind to $_. port 777: $@\n"
+ and $exit_status=2 ;
close($socket);
}
}
sub SecondCheck {
foreach (@ips)
{
$socket = new IO::Socket::INET->new(PeerAddr => $_,
PeerPort => '443',
Proto => 'tcp',
Timeout => 2,
)
or print "could not create bind to $_. port 443: $@\n"
+ and $exit_status=2;
close($socket);
}
}
#calling in the subz!
&GetIps;
&FirstCheck;
&SecondCheck;
#exiting the program with an exit status.
exit ($exit_status);
also perl throws a bunch of errors if i run this with strict. anyone want to try it in strict and tell me whats wrong?
| [reply] [Watch: Dir/Any] [d/l] |