mirror of
https://github.com/pandorafms/pandorafms.git
synced 2025-07-28 00:04:37 +02:00
2012-02-06 Koichiro Kikuchi <koichiro@rworks.jp>
* lib/PandoraFMS/SNMPServer.pm: Added SNMPv2 Trap support! git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@5489 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
parent
0278a10400
commit
5ee794be88
@ -1,3 +1,7 @@
|
|||||||
|
2012-02-06 Koichiro Kikuchi <koichiro@rworks.jp>
|
||||||
|
|
||||||
|
* lib/PandoraFMS/SNMPServer.pm: Added SNMPv2 Trap support!
|
||||||
|
|
||||||
2012-02-03 Ramon Novoa <rnovoa@artica.es>
|
2012-02-03 Ramon Novoa <rnovoa@artica.es>
|
||||||
|
|
||||||
* lib/PandoraFMS/Core.pm: Added support for ff interval. Small
|
* lib/PandoraFMS/Core.pm: Added support for ff interval. Small
|
||||||
|
@ -64,7 +64,11 @@ sub new ($$;$) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (system ($config->{'snmp_trapd'} . ' -t -On -n -a -Lf ' . $config->{'snmp_logfile'} . ' -p ' . $pid_file . ' -F %4y-%02.2m-%l[**]%02.2h:%02.2j:%02.2k[**]%a[**]%N[**]%w[**]%W[**]%q[**]%v\\\n >/dev/null 2>&1') != 0) {
|
my $snmptrapd_args = ' -t -On -n -a -Lf ' . $config->{'snmp_logfile'} . ' -p ' . $pid_file;
|
||||||
|
$snmptrapd_args .= ' --format1=SNMPv1[**]%4y-%02.2m-%l[**]%02.2h:%02.2j:%02.2k[**]%a[**]%N[**]%w[**]%W[**]%q[**]%v\\\n';
|
||||||
|
$snmptrapd_args .= ' --format2=SNMPv2[**]%4y-%02.2m-%l[**]%02.2h:%02.2j:%02.2k[**]%b[**]%v\\\n';
|
||||||
|
|
||||||
|
if (system ($config->{'snmp_trapd'} . $snmptrapd_args . ' >/dev/null 2>&1') != 0) {
|
||||||
logger ($config, " [E] Could not start snmptrapd.", 1);
|
logger ($config, " [E] Could not start snmptrapd.", 1);
|
||||||
print_message ($config, " [E] Could not start snmptrapd.", 1);
|
print_message ($config, " [E] Could not start snmptrapd.", 1);
|
||||||
return undef;
|
return undef;
|
||||||
@ -138,26 +142,52 @@ sub pandora_snmptrapd {
|
|||||||
print INDEXFILE $last_line . ' ' . $last_size;
|
print INDEXFILE $last_line . ' ' . $last_size;
|
||||||
close INDEXFILE;
|
close INDEXFILE;
|
||||||
|
|
||||||
# Skip Headers
|
# Skip lines other than SNMP Trap logs
|
||||||
next if ($line =~ m/NET-SNMP/);
|
next unless ($line =~ m/^SNMPv[12]\[\*\*\]/);
|
||||||
|
|
||||||
# Unknown data
|
(my $trap_ver, $line) = split(/\[\*\*\]/, $line, 2);
|
||||||
next if ($line !~ m/\[\*\*\]/ || matches_filter ($dbh, $pa_config, $line) == 1);
|
|
||||||
|
# Process SNMP filter
|
||||||
|
next if (matches_filter ($dbh, $pa_config, $line) == 1);
|
||||||
|
|
||||||
logger($pa_config, "Reading trap '$line'", 10);
|
logger($pa_config, "Reading trap '$line'", 10);
|
||||||
my ($date, $time, $source, $oid, $type, $type_desc, $value, $data) = ('', '', '', '', '', '', '', '');
|
my ($date, $time, $source, $oid, $type, $type_desc, $value, $data) = ('', '', '', '', '', '', '', '');
|
||||||
($date, $time, $source, $oid, $type, $type_desc, $value, $data) = split(/\[\*\*\]/, $line);
|
|
||||||
|
if ($trap_ver eq "SNMPv1") {
|
||||||
|
($date, $time, $source, $oid, $type, $type_desc, $value, $data) = split(/\[\*\*\]/, $line, 8);
|
||||||
|
|
||||||
|
$value = limpia_cadena ($value);
|
||||||
|
|
||||||
|
# Try to save as much information as possible if the trap could not be parsed
|
||||||
|
$oid = $type_desc if ($oid eq '' || $oid eq '.');
|
||||||
|
|
||||||
|
} elsif ($trap_ver eq "SNMPv2") {
|
||||||
|
($date, $time, $source, $data) = split(/\[\*\*\]/, $line, 4);
|
||||||
|
my @data = split(/\t/, $data);
|
||||||
|
|
||||||
|
# extract IP address from %b part:
|
||||||
|
# * destination part appears in Net-SNMP > 5.3
|
||||||
|
# * protocol name part and bracketted IP addr w/ port number appear in
|
||||||
|
# Net-SNMP > 5.1 (Net-SNMP 5.1 has IP addr only).
|
||||||
|
# * port number is signed in Net-SNMP 5.2
|
||||||
|
$source =~ s/(?:(?:TCP|UDP):\s*)?\[?([^] ]+)\]?(?::-?\d+)?(?:\s*->.*)?$/$1/;
|
||||||
|
|
||||||
|
shift @data; # Drop unused 1st data.
|
||||||
|
$oid = shift @data;
|
||||||
|
|
||||||
|
if (!defined($oid)) {
|
||||||
|
logger($pa_config, "[W] snmpTrapOID not found (Illegal SNMPv2 trap?)", 1);
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
$oid =~ s/.* = OID: //;
|
||||||
|
$data = join("\t", @data);
|
||||||
|
}
|
||||||
|
|
||||||
my $timestamp = $date . ' ' . $time;
|
my $timestamp = $date . ' ' . $time;
|
||||||
$value = limpia_cadena ($value);
|
|
||||||
|
|
||||||
my ($custom_oid, $custom_type, $custom_value) = ('', '', '');
|
my ($custom_oid, $custom_type, $custom_value) = ('', '', '');
|
||||||
|
|
||||||
# custom_type, custom_value is not used since 4.0 version, all custom data goes on custom_oid
|
# custom_type, custom_value is not used since 4.0 version, all custom data goes on custom_oid
|
||||||
$custom_oid = $data;
|
$custom_oid = $data;
|
||||||
|
|
||||||
# Try to save as much information as possible if the trap could not be parsed
|
|
||||||
$oid = $type_desc if ($oid eq '' || $oid eq '.');
|
|
||||||
|
|
||||||
# Insert the trap into the DB
|
# Insert the trap into the DB
|
||||||
if (! defined(enterprise_hook ('snmp_insert_trap', [$pa_config, $source, $oid, $type, $value, $custom_oid, $custom_value, $custom_type, $timestamp, $self->getServerID (), $dbh]))) {
|
if (! defined(enterprise_hook ('snmp_insert_trap', [$pa_config, $source, $oid, $type, $value, $custom_oid, $custom_value, $custom_type, $timestamp, $self->getServerID (), $dbh]))) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user