gpt4 book ai didi

perl - 从 perl 中的 mib 值打印 mib 名称

转载 作者:行者123 更新时间:2023-12-02 00:46:23 25 4
gpt4 key购买 nike

这是我使用 perl 遍历 net:snmp 中的表的代码:

      #! /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: %s\n", $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 = %s\n", $oid, $table{$oid};
} else {
printf "%s = %s\n", $oid, unpack 'H*', $table{$oid};
}
}

exit 0;

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

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

if (!defined $list) {
printf "ERROR: %s\n", $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 ],
-maxrepetitions => 10,
);

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 提供绑定(bind)哈希,%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 是一个绑定(bind)哈希,所以您不能只进行查找并分配给词法变量,即 my $oid = $SNMP::MIB{ $oidstr}。您每次都必须直接访问它。

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

关于perl - 从 perl 中的 mib 值打印 mib 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8507392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com