不能使用未定义的值作为 HASH 引用
Can't use an undefined value as a HASH reference
我正在尝试对 wlc 上的 AP 状态执行 snmpwalk。我真的是 perl 的新手,所以请耐心等待,但我正在使用 this guide。我能够很好地获得 CPU 利用率,但这只是一个获取请求,因为这是一个步行。
我的输入:perl test.pl -H 10.192.54.30 -C public -O .1.3.6.1.4.1.14179.2.2.1.1.6.0 -w 20 -c 30
代码:
#!/bin/perl
use strict;
use warnings;
use Net::SNMP;
use Getopt::Long qw(:config no_ignore_case);
my $hostaddr = '';
my $community = '';
my $crit = '';
my $warn = '';
my $oid = '';
GetOptions(
"host|H=s" => $hostaddr,
"community|C=s" => $community,
"crit|c:s" => $crit,
"warn|w:s" => $warn,
"oid|O=s" => $oid);
print "$hostaddr $community $crit $warn $oid\n";
my ($session, $error) = Net::SNMP->session(
-hostname => "$hostaddr",
-community => "$community",
-timeout => "30",
-port => "161");
if (!defined($session)) {
printf("ERROR: %s.\n", $error);
exit 1;
}
my $response = $session->get_table( -baseoid => $oid );
if (! defined $response) {
die "Failed to get OID '$oid': " . $session->error;
}
foreach my $key (keys %$response) {
print "$key: $response->{$key}\n";
}
my $err = $session->error;
if ($err){
return 1;
}
print "\n";
exit 0;
输出:
10.192.54.30 public 30 20 .1.3.6.1.4.1.14179.2.2.1.1.6.0
Can't use an undefined value as a HASH reference at test.pl line 26.
几个问题:
你打错了$session->get_request
。至少,您必须传递 -varbindlist
选项和 OID 数组引用。参见 documentation.
get_request
returns undef
出错,并且由于 undef
不是散列引用,您不能取消引用它。在尝试使用 $response
.
之前,您必须检查错误
您不应该为了打印它们而将 $response
的内容复制到单独的散列中。
固定版本:
my $response = $session->get_request( -varbindlist => [$desc] );
if (! defined $response) {
die "Failed to get OID '$desc': " . $session->error;
}
foreach my $key (keys %$response) {
print "$key: $response->{$key}\n";
}
# Alternatively,
# use Data::Dumper; print Dumper $response;
我正在尝试对 wlc 上的 AP 状态执行 snmpwalk。我真的是 perl 的新手,所以请耐心等待,但我正在使用 this guide。我能够很好地获得 CPU 利用率,但这只是一个获取请求,因为这是一个步行。
我的输入:perl test.pl -H 10.192.54.30 -C public -O .1.3.6.1.4.1.14179.2.2.1.1.6.0 -w 20 -c 30
代码:
#!/bin/perl
use strict;
use warnings;
use Net::SNMP;
use Getopt::Long qw(:config no_ignore_case);
my $hostaddr = '';
my $community = '';
my $crit = '';
my $warn = '';
my $oid = '';
GetOptions(
"host|H=s" => $hostaddr,
"community|C=s" => $community,
"crit|c:s" => $crit,
"warn|w:s" => $warn,
"oid|O=s" => $oid);
print "$hostaddr $community $crit $warn $oid\n";
my ($session, $error) = Net::SNMP->session(
-hostname => "$hostaddr",
-community => "$community",
-timeout => "30",
-port => "161");
if (!defined($session)) {
printf("ERROR: %s.\n", $error);
exit 1;
}
my $response = $session->get_table( -baseoid => $oid );
if (! defined $response) {
die "Failed to get OID '$oid': " . $session->error;
}
foreach my $key (keys %$response) {
print "$key: $response->{$key}\n";
}
my $err = $session->error;
if ($err){
return 1;
}
print "\n";
exit 0;
输出:
10.192.54.30 public 30 20 .1.3.6.1.4.1.14179.2.2.1.1.6.0
Can't use an undefined value as a HASH reference at test.pl line 26.
几个问题:
你打错了
$session->get_request
。至少,您必须传递-varbindlist
选项和 OID 数组引用。参见 documentation.get_request
returnsundef
出错,并且由于undef
不是散列引用,您不能取消引用它。在尝试使用$response
. 之前,您必须检查错误
您不应该为了打印它们而将
$response
的内容复制到单独的散列中。
固定版本:
my $response = $session->get_request( -varbindlist => [$desc] );
if (! defined $response) {
die "Failed to get OID '$desc': " . $session->error;
}
foreach my $key (keys %$response) {
print "$key: $response->{$key}\n";
}
# Alternatively,
# use Data::Dumper; print Dumper $response;