0

perl は初めてですが、nagios 用のプラグインを作成しようとしています。失敗する単純な get 要求がありますが、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 を確認すると、正常に動作します。

4

3 に答える 3

2

コマンドラインを介して、「get」ではなく「walk」を実行していることはすでに確認済みです。スクリプトで「取得」したい特定の値がある場合は、ターゲットを識別する完全な OID を入力します。

テーブル レコードにはおそらく取得したいものがあるため (FASTTRAKIDERAID-MIB のすべてが実際には表形式であるように見えます)、単純な get では十分ではありません。snmpwalk.pl付属のスクリプトを確認するか、探している機能を簡単に提供できるNet::SNMPかどうかを確認してください。SNMP::Util

于 2010-08-18T01:31:04.347 に答える
1

get_request ではなく、get_next_request を使用してください。渡した oid の後に最初の有効な oid を返します。

于 2013-03-20T18:19:53.063 に答える
0

問題が見つかりました。snmpwalk を使用すると、ツリー全体を取得して値を返します。perl モジュールはそうしません。ツリーの下にあるものは 1 つしかないと思っていても、ツリーを最後までトラバースしません。

于 2010-08-03T21:25:54.177 に答える