<citaat van="Jose Manuel García"> > Hi, > > > > Im writting from Spain and my english is not very good, thought, Ill try > to do my best. > > > > I have a Nagios 2.9 under Ubuntu 6.10. Everything works fine but I need to > monitor a Remote Windows DHCP Server and I dont know how. Evidently > check_dhcp is not useful in remote hosts.
Just wrote this yesterday (mostly ripped from check_dhcp.pl), you need to install dhcping. /usr/local/nagios/plugins/check-dhcping: #!/usr/bin/perl -w # # dhcping suid wrapper # use strict; use warnings; use Getopt::Long qw(:config no_ignore_case); use IO::Socket; use IO::Interface; my ($status, $host, $mac, $ip, $verbose, $timeout); my $interface = 'eth0'; my $VERSION = 0.1; my $HELP = 0; my $DOTTED_QUAD = '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'; %ENV=(); # Default values $timeout = 3; my %STATUSCODE = ( 'OK' => '0', 'WARNING' => '1', 'CRITICAL' => '2', 'UNKNOWN' => '3'); my $usage = <<EOF; This plugin tests the availability of a given DHCP server using unicast delivery. This is necessary if the monitoring host is on a different subnet. Using broadcast and a DHCP relay would also prevent the check from probing individual servers. Usage: check_dhcp -H|--host [-i|--interface] [-t|--timeout] -H, --host=ADDRESS IP address of DHCP server that we must hear from -i, --interface=STRING Interface to use for obtaining ip/mac address from (default eth0) -t, --timeout=INTEGER Seconds to wait for DHCPOFFER before timeout occurs (default: $timeout) -h, --help Print this help screen Note: This plugin will need to run with root permissions in order to access priviledge ports 67 & 68. Since Nagios by default runs its plugins under unpriviledged user 'nagios', you will need to setuid root like: % chown root:root check_dhcping.pl % chmod 4755 check_dhcping.pl EOF my $debug; # handle cmdline args my $result = GetOptions( "H|host=s" => \$host, "i|interface=s" => \$interface, "t|timeout:i" => \$timeout, "h|help" => \$HELP, "d|debug" => \$debug, ); if( !$result ) { print "ERROR: Problem with cmdline args\n"; print $usage; exit($STATUSCODE{'UNKNOWN'}); } if( $HELP ) { print $usage; exit($STATUSCODE{'UNKNOWN'}); } if ( !$host ){ print "ERROR: Missing required arguments\n"; print $usage; exit($STATUSCODE{'UNKNOWN'}); } unless ( $host =~ /($DOTTED_QUAD)/ ){ print "Invalid IP Address: $host\n"; exit($STATUSCODE{'UNKNOWN'}); } $host = $1; # Get the mac and IP address for the given interface my $s = IO::Socket::INET->new(Proto => 'udp'); if ( !($ip = $s->if_addr($interface)) ){ print "Error: $!\n"; exit($STATUSCODE{'CRITICAL'}); } if ( !($mac = $s->if_hwaddr($interface)) ){ print "Error: $!\n"; exit($STATUSCODE{'CRITICAL'}); } # This is needed in order to avoid sperl complaining # about "Insecure dependencies" unless ( $ip =~ /($DOTTED_QUAD)/ ){ print "Invalid IP Address: $ip\n"; exit($STATUSCODE{'UNKNOWN'}); } $ip = $1; unless ($mac =~ /((?:[[:xdigit:]]{2}:){5}[[:xdigit:]]{2})/) { print "Invalid hw Address: $mac\n"; exit($STATUSCODE{'UNKNOWN'}); } $mac = $1; my $args = "-i -t $timeout -c $ip -s $host -g $ip -h $mac"; $debug and print "ip=$ip, args=$args\n"; system "/usr/bin/dhcping $args"; if ($? == -1) { print "failed to execute dhcping: $!\n"; exit($STATUSCODE{'UNKNOWN'}); } if ($? & 127) { printf "child died with signal %d\n", ($? & 127); exit($STATUSCODE{'UNKNOWN'}); } # Note that dhcping has already provided some text on stdout, # which is reasonably suitable for nagios. # All that is left is to return an appropriate return code. my $rc = $? >> 8; exit ($rc ? 2 : 0); ------------------------------------------------------------------------- SF.Net email is sponsored by: The Future of Linux Business White Paper from Novell. From the desktop to the data center, Linux is going mainstream. Let it simplify your IT future. http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4 _______________________________________________ Nagios-users mailing list Nagios-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/nagios-users ::: Please include Nagios version, plugin version (-v) and OS when reporting any issue. ::: Messages without supporting info will risk being sent to /dev/null