2010-08-03 4 views
0

나는 perl을 처음 사용하지만, nagios 용 플러그인을 작성하려고합니다. 내가 실패하는 간단한 요청을 가지고 있지만, 내가 snmpwalk와 동일한 요청을 시도하면 작동합니다.Perl Net :: SNMP는 snmpwalk 작동시 noSuchName을 반환합니다.

내 코드는 다음과 같습니다

#!/usr/bin/perl -w 

use strict; 
use Net::SNMP; 

my $host = '10.10.10.203'; 
my $community = 'myComm'; 
my $session; 
my $error;  
my $response = undef; 

($session, $error) = Net::SNMP->session( 
    -hostname => $host, 
    -version => 2, 
    -community =>$community, 
    -port => 161, 
    -timeout => 20 
); 

my $uptimeOID = '1.3.6.1.2.1.1.3.0'; 
my $myOID = '1.3.6.1.4.1.7933'; 

if(!defined($response = $session->get_request($myOID))) 
{ 
    if($session->error_status == 2) 
    { 
    my $sessionError = $session->error; 
    print ("($sessionError) OID not supported ($myOID).\n"); 
    } 
} 
else 
{ 
    print ("$response"); 
} 

나는 그것이 noSuchName 말을 실패합니다이 스크립트를 실행하지만, 실행하는 경우 경우 :

snmpwalk -v 2c -c myComm 10.10.10.203 1.3.6.1.4.1.7933 

내가 원하는 응답을 얻을. 아무도 이것이 왜 효과가 없는지 아십니까?
이 스크립트로 가동 시간 OID를 확인하면 정상적으로 작동합니다.

답변

0

내 문제가 발견되었습니다. snmpwalk를 사용하면 전체 트리를 가져 와서 값을 반환합니다. 펄 모듈은 그렇지 않습니다. 그 아래에 단 하나의 것이 있다고 생각할지라도 끝까지 나무를 횡단하지 않습니다. 그냥 말하지 않습니다.

2

당신은 이미 명령 줄을 통해 "get"보다는 "walk"를하고 있음을 확인했습니다. 스크립트에 "얻으려는"특정 값이 있으면 대상을 식별하는 전체 OID를 입력하십시오.

FASTTRAKIDERAID-MIB의 모든 것이 실제로 테이블 형식 인 것으로 보이는 표 레코드에 뭔가가 있습니다. 따라서 간단한 get으로 충분하지 않습니다. Net::SNMP과 함께 제공되는 snmpwalk.pl 스크립트를 보거나 SNMP::Util이 원하는 기능을 쉽게 제공 할 수 있는지 확인하십시오.

1

get_request가 아닌 get_next_request를 사용하십시오. 전달한 후 첫 번째 유효한 OID를 반환합니다.