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.但是,您的示例中使用的那些默认情况下会在我的系统上加载. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |