0

私はNetSNMP::Agentいくつかの値を照会するために Perl で使用しています。現在、リストを返す方法を検討しています。EG テーブル名、プロセスなど

クエリが実行されたときに各アイテムの新しいツリー エントリを作成するだけですか、それとも事前に定義する必要があるものがありますか? 事前定義された MIB をさまよっていると、同様のリストが表示されます。アドホック値のメカニズムは何なのか疑問に思っています。

また、そのようなリストを取得する方法はありますか、それとも毎回snmpget必要ですか?snmpwalk

4

2 に答える 2

1

テーブルを読み取るために使用するコードを次に示します ($session が確立された Net::SNMP セッションであると仮定します)。

# I create a large hash of all the OIDs and their names
my %oidmap = (
    'vsvrServiceName' => '.1.3.6.1.4.1.5951.4.1.3.2.1.8',
    'vsvrServiceFullName' => '.1.3.6.1.4.1.5951.4.1.3.2.1.9',
    'vserverFullName' => '.1.3.6.1.4.1.5951.4.1.3.2.1.10',
    ...
);

# Choose which column names I want to extract from table
my @columnnames = qw(
    vserverFullName
    vsvrServiceName
    vsvrServiceFullName
);

# Get ALL entries in the table for those columns
my $vsvrEntries = $session->get_entries(
    -columns => [ map { $oidmap{$_} } @columnnames ],
    -maxrepetitions => 1,
);


# Decode the result column names, column values, and index
foreach my $key ( keys %{$vsvrEntries} ) {
    my $value = $vsvrEntries->{$key};

    # scan through OIDs to see if there's a match
    foreach my $oid_name ( @columnnames ) {
        my $oid = $oidmap{ $oid_name };
        next if ( $key !~ m{^\Q$oid\E\.(.+)$} );

        my $remainder = $1;

        print( "  $oid_name.$remainder = $value\n" );
        last;
    }
}

難しいのは、OID のリストを取得することです。そのためには、それらを自分で解決することもできます。または、Linux サーバーを見つけて MIB を隠しておき/usr/share/snmp/mibs、コマンド ラインから net-snmp ツールを使用することもできます。

user@myhost:~$ snmptranslate -I b -O n vsvrServiceName
.1.3.6.1.4.1.5951.4.1.3.2.1.8
于 2013-07-01T14:13:06.470 に答える
0

私は NetSNMP パッケージを使用した経験がほとんどなく、NET::SNMP を使用していますが、達成しようとしていることについてさらに協力し、サンプル コードまたは特定の OID 参照を投稿できる場合は、私があなたを助けることができるかもしれません...

于 2013-06-30T06:55:45.070 に答える