Perl Net :: SNMP возвращает noSuchName, когда работает snmpwalk - PullRequest
0 голосов
/ 03 августа 2010

Я новичок в 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 времени работы с этим сценарием, он будет работать так, как должен.

Ответы [ 3 ]

2 голосов
/ 18 августа 2010

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

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

1 голос
/ 20 марта 2013

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

0 голосов
/ 04 августа 2010

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

...