2012-06-20 3 views
2

큰 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 매개 변수가 작동하고 작동합니다. 그로 인해 두 가지 질문이 생깁니다.

  1. 트랩 송신자의 기본값은 161입니까?
  2. 디버그를 실행할 때이 오류가 발생합니다. 무슨 뜻이에요?

    오류 : [97] 인터넷 : SNMP :: 전송 :: IPv4의 :: UDP :: AGENT_ADDR() : 주소 가족의 변화에 ​​의해

+0

네트워크 트래픽을 탐지하여 실제로 전송 된 내용을 확인할 수 있습니까? 어쩌면 문제가 다른쪽에 있거나 라우팅에서 예상치 못한 어딘가에 보냅니다. 세션에서'$ sess-> debug (255)'를 사용하여 디버그 모드를 활성화 할 수도 있습니다. –

+0

디버그에서 보내는 것처럼 보입니다. 위의 출력을 추가하겠습니다. –

+0

'snmptrap '으로 트랩을 보내는 것이 가능합니까? 많은 서버가 v1 트랩을 허용하지 않는다고 생각합니다. –

답변

1

고정 프로토콜 패밀리가 지원하지 않는 : 분리 실패 포트 '기본값을 161에서 162로 설정하십시오.