Perl Net::SNMP возвращает noSuchName, когда snmpwalk работает

Я новичок в perl, но пытаюсь написать плагин для nagios. У меня есть простой запрос на получение, который не работает, но если я попробую тот же запрос с помощью snmpwalk, он сработает.

Мой код:

#!/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 безотказной работы с помощью этого скрипта, он будет работать так, как должен.


person BLAKE    schedule 03.08.2010    source источник


Ответы (3)


Вы уже определили, что через командную строку вы выполняете «прогулку», а не «получение». Если есть конкретное значение, которое вы хотите «получить» в своем скрипте, введите полный OID, идентифицирующий цель.

В записи таблицы есть что-то, что вы, вероятно, хотите получить (и кажется, что все в FASTTRAKIDERAID-MIB на самом деле является табличным), поэтому простого получения недостаточно. Посмотрите на сценарий snmpwalk.pl, поставляемый с Net::SNMP, или посмотрите, сможет ли SNMP::Util легко обеспечить необходимую вам функциональность.

person medina    schedule 18.08.2010

Используйте get_next_request, а не get_request. Он вернет первый действительный oid после того, который вы передадите.

person Joe Ceresini    schedule 20.03.2013

Я нашел свою проблему. Когда я использую snmpwalk, он захватывает все дерево и возвращает значение. Модуль Perl не будет. Он не проходит по дереву до конца, даже если под ним есть только одна вещь, он просто говорит «нет».

person BLAKE    schedule 03.08.2010