加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

mib名称从perl中的mib值打印

发布时间:2020-12-15 23:32:33 所属栏目:大数据 来源:网络整理
导读:这是我用来遍历net:snmp使用perl的表的代码: #! /usr/local/bin/perl use strict; use warnings; use Net::SNMP qw(:snmp); my $OID_hrSystem = '1.3.6.1.2.1.25.1'; my $OID_ifPhysAddress = '1.3.6.1.2.1.2.2.1.6'; my ($session,$error) = Net::SNMP-se
这是我用来遍历net:snmp使用perl的表的代码:

#! /usr/local/bin/perl

      use strict;
      use warnings;

      use Net::SNMP qw(:snmp);

      my $OID_hrSystem = '1.3.6.1.2.1.25.1';
      my $OID_ifPhysAddress = '1.3.6.1.2.1.2.2.1.6';        

      my ($session,$error) = Net::SNMP->session(
         -hostname    => shift || 'localhost',-community   => shift || 'public',-nonblocking => 1,-translate   => [-octetstring => 0],-version     => 'snmpv2c',);

      if (!defined $session) {
         printf "ERROR: %s.n",$error;
         exit 1;
      }

      my %table; # Hash to store the results

      my $result = $session->get_bulk_request(
         -varbindlist    => [ $OID_hrSystem ],-callback       => [ &;table_callback,%table ],-maxrepetitions => 10,);

      if (!defined $result) {
         printf "ERROR: %sn",$session->error();
         $session->close();
         exit 1;
      }

      # Now initiate the SNMP message exchange.

      snmp_dispatcher();

      $session->close();

      # Print the results,specifically formatting ifPhysAddress.

      for my $oid (oid_lex_sort(keys %table)) {
         if (!oid_base_match($OID_ifPhysAddress,$oid)) {
            printf "%s = %sn",$oid,$table{$oid};                 
         } else {                                   
            printf "%s = %sn",unpack 'H*',$table{$oid};
         }                                      
      }

      exit 0;

      sub table_callback
      {
         my ($session,$table) = @_;

         my $list = $session->var_bind_list();

         if (!defined $list) {
            printf "ERROR: %sn",$session->error();
            return;
         }

         # Loop through each of the OIDs in the response and assign
         # the key/value pairs to the reference that was passed with
         # the callback.  Make sure that we are still in the table
         # before assigning the key/values.

         my @names = $session->var_bind_names();
         my $next  = undef;

         while (@names) {
            $next = shift @names;
            if (!oid_base_match($OID_hrSystem,$next)) {
               return; # Table is done. chakri
            }
            $table->{$next} = $list->{$next};
         }

         # Table is not done,send another request,starting at the last
         # OBJECT IDENTIFIER in the response.  No need to include the
         # calback argument,the same callback that was specified for the
         # original request will be used.

         my $result = $session->get_bulk_request(
            -varbindlist    => [ $next ],);

         if (!defined $result) {
            printf "ERROR: %s.n",$session->error();
         }

         return;
      }

输出是:

1.3.6.1.2.1.25.1.1.0 = 1 hour,12:00.77

1.3.6.1.2.1.25.1.2.0 = ?
                        +

1.3.6.1.2.1.25.1.3.0 = 1536

1.3.6.1.2.1.25.1.4.0 = BOOT_IMAGE=/boot/vmlinuz-3.0.0-14-generic root=UUID=5c4c8d22-3cea-4410-aaad-f297c75d217e ro quiet splash vt.handoff=7

1.3.6.1.2.1.25.1.5.0 = 1

1.3.6.1.2.1.25.1.6.0 = 133

1.3.6.1.2.1.25.1.7.0 = 0

但是我所要求的输出如下:

hrSystemUptime.0 = 1:08:54.36

hrSystemDate.0 = 2011-12-14,16:0:2.0,+1:0

hrSystemInitialLoadDevice.0 = 1536

hrSystemInitialLoadParameters.0 = "BOOT_IMAGE=/boot/vmlinuz-3.0.0-14-generic root=UUID=5c4c8d22-3cea-4410-aaad-f297c75d217e ro quiet splash vt.handoff=7"

hrSystemNumUsers.0 = 1

hrSystemProcesses.0 = 133

hrSystemMaxProcesses.0 = 0

输出中的主要内容是我希望在输出中打印mib名称而不是mib值

解决方法

您可以使用 SNMP module(在Ubuntu上可用作libsnmp-perl),它为加载的MIB(%SNMP :: MIB)提供绑定的哈希.这是一些示例代码:

use SNMP;
SNMP::initMib();
print "$SNMP::MIB{'1.3.6.1.2.1.25.1.1.0'}{label} = n";
#Should print "hrSystemUptime = "

因为%SNMP :: MIB是绑定哈希,所以您不能只进行查找并分配给词法变量,即我的$oid = $SNMP :: MIB {$oidstr}.您必须每次都直接访问它.

它从MIB加载了许多其他信息,包括数据类型,这可能有助于解决您使用hrSystemDate时遇到的问题.另外,如果需要加载特定的MIB,请参阅the man page for mib_api.但是,您的示例中使用的那些默认情况下会在我的系统上加载.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读