Я пытаюсь отправить ловушку как часть более крупного скрипта Perl. Я скопировал код перехвата в другой файл и запускаю его сам по себе. Похоже, что код считает, что ловушка успешно отправлена, но я не вижу ловушку ни на одной машине, на которой у меня работает прослушиватель ловушек.
Вот код:
#! /usr/local/bin/perl
use strict;
use warnings;
use Net::SNMP;
#messy hardcoding
my $snmp_target = '192.168.129.50';
#my $snmp_target = '10.200.6.105'; # Server running trap listener
my $enterprise = '1.3.6.1.4.1.27002.1';
my ($sess, $err) = Net::SNMP->session(
-hostname => $snmp_target,
-version => 1, #trap() requires v1
);
if (!defined $sess) {
print "Error connecting to target ". $snmp_target . ": ". $err;
next;
}
my @vars = qw();
my $varcounter = 1;
push (@vars, $enterprise . '.' . $varcounter);
push (@vars, OCTET_STRING);
push (@vars, "Test string");
my $result = $sess->trap(
-varbindlist => \@vars,
-enterprise => $enterprise,
-specifictrap => 1,
);
if (! $result)
{
print "An error occurred sending the trap: " . $sess->error();
}
РЕДАКТИРОВАТЬ: добавлен вызов $sess->debug(255), вот результат:
debug: [440] Net::SNMP::Dispatcher::_event_insert(): created new head and tail [ARRAY(0x1af1fea8)]
debug: [687] Net::SNMP::Message::send(): transport address 192.168.129.50:161
debug: [2058] Net::SNMP::Message::_buffer_dump(): 70 bytes
[0000] 30 44 02 01 00 04 06 70 75 62 6C 69 63 A4 37 06 0D.....public.7.
[0016] 09 2B 06 01 04 01 81 D2 7A 01 40 04 C0 A8 81 85 .+......z.@.....
[0032] 02 01 06 02 01 01 43 01 00 30 1B 30 19 06 0A 2B ......C..0.0...+
[0048] 06 01 04 01 81 D2 7A 01 01 04 0B 54 65 73 74 20 ......z....Test
[0064] 73 74 72 69 6E 67 string
debug: [517] Net::SNMP::Dispatcher::_event_delete(): deleted [ARRAY(0x1af1fea8)], list is now empty
РЕДАКТИРОВАТЬ: Может ли кто-нибудь запустить прослушиватель ловушек, попробовать этот код на своей машине и сообщить мне, работает ли он?
РЕДАКТИРОВАТЬ: Пробовал с моего MBP. Тот же результат. Затем заметил, что в отладочной информации написано, что она отправляет на порт 161. Принудительно параметр -port => 162
, и он работает. Это оставляет меня с парой вопросов:
- Почему отправитель ловушки по умолчанию имеет номер 161?
Я получаю эту ошибку при запуске с включенной отладкой. Что это означает?
ошибка: [97] Net::SNMP::Transport::IPv4::UDP::agent_addr(): Не удалось отключиться: семейство адресов не поддерживается семейством протоколов
$sess->debug(255)
в сеансе. - person Oleg V. Volkov   schedule 21.06.2012snmptrap
? Я думаю, что многие серверы не принимают ловушку v1. - person J-16 SDiZ   schedule 21.06.2012snmptrap
работает. - person coding_hero   schedule 21.06.2012