Check snmp follow.pl/Check snmp follow.pl
From Federal Burro of Information
Jump to navigationJump to search
#!/usr/bin/perl -w use strict; use Data::Dumper; use Net::SNMP; use Getopt::Long; use Pod::Usage; use POSIX; my $timeout = 1; my $debug = 1; my $verbose = 0; my $man = 0; my $help = 0; my $comm = ; my $host = ; my $string = ; # the string to grep from oid1 my $oid1 = ; # the list of value from which to grep $string my $oid2 = ; # we find an ID greep oid1, now grep oid2 for the id, looking for $r my $r = ; # the value to find in the end to go green, active , up , good, that sort of thing my $foundoid = ; # has the full oid where thestring was fond , need to get the id out of that. my $id = ; # the index in the table of the thing we want to find. my $result = GetOptions ( "comm=s" => \$comm, "H=s" => \$host, "string=s" => \$string, "oid1=s" => \$oid1, "oid2=s" => \$oid2, "r=s" => \$r, 'help|?' => \$help, man => \$man, 'v' => \$verbose) or pod2usage(2); pod2usage(1) if $help; pod2usage(-exitstatus => 0, -verbose => 2) if $man; if ( $comm eq ) { die "community string not set\n"; } if ( $host eq ) { die "host not set\n"; } if ( $string eq ) { die "string not set\n"; } if ( $oid1 eq ) { die "oid1 not set\n"; } if ( $oid2 eq ) { die "oid2 not set\n"; } if ( $result eq ) { die "result not set\n"; } if ( $verbose ) { print "Community string is $comm\n"; print "Host is $host\n"; print "string is $string\n"; print "oid1 is $oid1\n"; print "oid2 is $oid2\n"; print "r is $result\n"; print "Verbose is $verbose\n"; } sub isip ( $ ) { my $string = shift; if ( $string =~ /(\d+)(\.\d+){3}/) { print "$string", ' matches /(\d+)(\.\d+){3}/', "\n"; } else { print "$string", ' does not matche /(\d+)(\.\d+){3}/', "\n"; } # if ($string !~ /([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)/) { # a.b.c.d will be considered as legal ip address # without ^ and $ below -123.235.1.248 is a legal ip address if ($string !~ /^([\d]+)\.([\d]+)\.([\d]+)\.([\d]+)$/) { print "$string not an IP address\n"; next; } my $notIP = 0; foreach my $s (($1, $2, $3, $4)) { # print "s=$s;"; if (0 > $s || $s > 255) { $notIP = 1; last; } } if ($notIP) { return 0; } return 1; } my ($session, $error) = Net::SNMP -> session( -hostname => $host , -community => $comm, -timeout => $timeout, -version => 2 ); if ( $session ) { $verbose && print "Session created ok\n"; my $result = $session->get_entries( -columns => [ $oid1 ],); if ( $result ) { my $found =0; # print Dumper ( $result ); #if ( ! defined $result->{$oid1} ) { # print "UNKNOWN: Failed to get oid1 $oid1\n"; # exit(3); # UNKNOWN #} for (keys %$result) { if ( $result->{$_} eq $string ) { $found++; $foundoid = $_; } } if ( $found == 1 ) { $verbose && print "Found exacly one match $foundoid\n"; if ( $foundoid =~ /$oid1\.(\d+)/ ) { $id = $1; $verbose && print "Id is $1\n"; } } elsif ( $found > 1 ) { print "Found more than one match\n"; exit 3; } else { print "Did not find string in $oid1 grep\n"; exit 3; } my $result = $session->get_request( -varbindlist => [ $oid2.".".$id ],); if ( $result ) { if ( ! defined $result->{$oid2.".".$id} ) { print "UNKNOWN: Failed to get oid1 $oid1\n"; exit(3); # UNKNOWN } $verbose && print "Found value ".$result->{$oid2.".".$id}."\n"; if ( $result->{$oid2.".".$id} eq $r ) { print "OK: $r\n"; exit 0; } } # print "OK: ".$percent."%|'percent'=$percent%:$warn:$crit\n"; } else { print "Failed to get oid1\n"; print $session->error()."\n"; exit 3; } } else { $verbose && print "failed to make snmp session for ".$host."\n"; return 0; } __END__ =head1 NAME check_snmp_ratio.pl =head1 SYNOPSIS check_snmp_follow.pl -comm <string> -H <host> -oid1 <.1.1.1> -oid2 <.1.1.2> -w 80 -c 90 =head1 OPTIONS =over 8 =item B<-comm> The community string =item B<-H> The host to connect to. =item B<-grep> The string to grep for first oid for. =item B<-oid1> The OID to grep for the string. =item B<-oid2> Once the id was found via the string above, go look for the value for that id in this OID. =item B<-r> The value that needs to be found to be green =item B<-man> Prints the manual page and exits. =item B<-help> I need somebody, not just anybody, help me , please. =back =head1 DESCRIPTION B<This program> will search for =cut