1
0
mirror of https://github.com/opinkerfi/nagios-plugins.git synced 2024-11-10 04:23:44 +01:00
nagios-plugins/check_http_ntlm/trunk/check_http_ntlm.pl

68 lines
2.3 KiB
Perl
Raw Normal View History

2010-06-10 21:06:17 +02:00
#!/usr/bin/perl
# 02/Feb/10 nagios@sanxiago.com
# check_http page for IIS servers with ntlm authentication
#
# this check receives a URL as a parameter, logins to the IIS server
# using the curl binary, then it parses the output of the command
# and captures the response code. Timeout pass and user values are currently hardcoded
# script currently only has handlers for some response codes, but a switch was used to
# add more in an easy way. Response code is found with regexp /HTTP\/1\.1 ([0-9]{3}) .*/
use Switch;
use Time::HiRes;
if (@ARGV < 3) {
print "Usage $0 <username> <password> <uri>\n";
exit 2;
}
$uri=$ARGV[2]; # URL OF THE PAGE WE WANT TO CHEK
$user=$ARGV[0]; # User
$pass=$ARGV[1]; # Password
$timeout=30; # Timeout in seconds
$start = Time::HiRes::time();
run_command("curl -u $user:$pass --ntlm --stderr /dev/null $uri -i ");
$time = sprintf("%.2f",Time::HiRes::time()-$start);
switch ($http_code){
case 200 {print $time."s $http_code OK | \"response_time\"=$time" . "s\n"; exit(0);}
case 302 {print $time."s $http_code PAGE MOVED | \"response_time\"=$time" . "s\n"; exit(1);}
case 403 {print $time."s $http_code Forbidden | \"response_time\"=$time" . "s\n"; exit(1);}
case 404 {print $time."s $http_code PAGE NOT FOUND | \"response_time\"=$time" . "s\n"; exit(2);}
case 500 {print $time."s $http_code SERVER ERROR | \"response_time\"=$time" . "s\n"; exit(2);}
case 401 {print $time."s $http_code UNAUTHORIZED | \"response_time\"=$time" . "s\n"; exit(1);}
else {print $time."s $http_code ERROR $http_code $output | \"response_time\"=$time" . "s\n"; exit(2);}
}
sub run_command {
$command=shift;
$command_name=$command;
$command_name=~ s/\n/\s/;
$pid = open(PIPE, "$command |") or die $!;
eval {
$output="";
local $SIG{ALRM} = sub { die "TIMEDOUT" };
alarm($timeout);
while (<PIPE>) {
print if ($ARGV[3]);
if($_=~/HTTP\/1\.1 ([0-9]{3}) .*/ && $authentication_sent){
$http_code=$1;
}
if($_=~/WWW-Authenticate/){
$authentication_sent=1;
}
$output=$output.$_;
}
close(PIPE);
};
if ($@) {
die $@ unless $@ =~ /TIMEDOUT/;
print "TIMEOUT";
kill 9, $pid;
$? ||= 9;
exit(2);
}
}