큰 Perl 스크립트의 일부로 트랩을 보내려고합니다. 나는 trapsending 코드를 다른 파일에 복사했고, 그 자체로 실행하고있다. 이 코드는 트랩이 성공적으로 전송되었다고 생각하는 것 같습니다. 그러나 트랩 수신기가 실행중인 두 시스템에서 트랩을 보지 못하고 있습니다.Perl의 Net :: SNMP로 트랩 보내기
#! /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();
}
편집 : 여기
코드의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 [email protected]
[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
편집 : $ sess-> 디버그 (255) 호출을 추가, 여기에 출력의 트랩 수신기를 실행하는 사람이 코드를 시도 할 수 컴퓨터가 작동하는지 알려주세요.
편집 : 내 MBP에서 시도해보십시오. 같은 결과. 그런 다음 디버그 정보가 포트 161로 전송 중임을 알게되었습니다. 강제로 -port => 162
매개 변수가 작동하고 작동합니다. 그로 인해 두 가지 질문이 생깁니다.
- 트랩 송신자의 기본값은 161입니까?
디버그를 실행할 때이 오류가 발생합니다. 무슨 뜻이에요?
오류 : [97] 인터넷 : SNMP :: 전송 :: IPv4의 :: UDP :: AGENT_ADDR() : 주소 가족의 변화에 의해
네트워크 트래픽을 탐지하여 실제로 전송 된 내용을 확인할 수 있습니까? 어쩌면 문제가 다른쪽에 있거나 라우팅에서 예상치 못한 어딘가에 보냅니다. 세션에서'$ sess-> debug (255)'를 사용하여 디버그 모드를 활성화 할 수도 있습니다. –
디버그에서 보내는 것처럼 보입니다. 위의 출력을 추가하겠습니다. –
'snmptrap '으로 트랩을 보내는 것이 가능합니까? 많은 서버가 v1 트랩을 허용하지 않는다고 생각합니다. –