【问题标题】:Returning a list from an SNMP agent从 SNMP 代理返回列表
【发布时间】:2013-06-27 18:23:59
【问题描述】:

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

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

另外 - 有没有办法使用 snmpget 获得这样的列表,或者这是否每次都需要 snmpwalk

【问题讨论】:

    标签: perl snmp


    【解决方案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
    

    【讨论】:

    • 实际上 - 我正在寻找如何生成并返回一个列表。数据库中的 EG 表或文件夹中的文件。
    • @ethrbunny 哦,我最诚挚的道歉,我应该更仔细地阅读你的问题;你确实说过agent。通常,SNMP 代理为单个 getgetnextset 请求中列出的每个 OID 返回一个 varbind(答案)。因此,代理通常“处理”列表方面 - 并为每个 OID 处理一次回调您的处理程序......
    • 那么为每个返回的项目创建一个树“节点”?我一直在尝试阅读(并理解)表格和容器,但运气不佳。也许无关?
    • 哦,这不是 Perl 问题,而是 MIB 和基本 SNMP 问题?您必须为自定义值编写 MIB。和/或仔细考虑 OID 和指标。我不打算在这里讨论它,因为 RFC 对此进行了广泛的记录。
    【解决方案2】:

    我几乎没有使用 NetSNMP 包的经验,我使用的是 NET::SNMP,但如果您可以就您想要实现的目标进行更多合作并发布一些示例代码或特定的 OID 参考,我可能会为您提供帮助...

    【讨论】:

    • 从数据库中返回一个表列表怎么样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多