从SNMP代理返回列表

时间:2013-06-27 18:23:59

标签: perl snmp

我在Perl中使用NetSNMP::Agent来查询某些值。现在我正在研究如何返回一个列表。 EG表名,流程等

在查询每个项目时是否只为每个项目创建一个新的树条目,或者是否有必须预定义的内容?在浏览预定义的MIB时,我看到类似的列表。只是想知道ad-hoc值的机制是什么。

此外 - 是否有办法使用snmpget获取此类列表,或者每次都需要snmpwalk

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我没有使用NetSNMP软件包的经验,我使用NET :: SNMP,但如果您可以更多地协作您正在尝试实现的内容并发布一些示例代码或特定的OID引用,我可能能够帮助您...