perl - 从SNMP解析主机名和AP状态

时间:2017-02-16 14:30:57

标签: perl snmp

这个想法是第一个get_table从WLAN控制器获取AP状态,然后它使用get_request获取AP的主机名,因为它打印出状态表。我遇到的问题是$ ap_name以数组的形式返回,当我只想要单个值时。

my ($session, $error) = Net::SNMP->session(
                        -hostname => "$hostaddr",
                        -community => "$community",
                        -timeout => "30",
                        -version => "2c",
                        -port => "161");

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


my $ap_stat = $session->get_table( -baseoid => $ap_stat_oid );
my $ap_name = $session->get_table( -baseoid => $ap_name_oid);

if (! defined $ap_stat || ! defined $ap_name) {
    die "Failed to get OID '$ap_stat_oid': " . $session->error;
    $session->close();
}
my @ap_name_array;
foreach my $ap_name_key (keys %$ap_name) {
        push(@ap_name_array,$ap_name->{$ap_name_key});
}
my @ap_stat_array;
foreach my $ap_stat_key (keys %$ap_stat) {
        push(@ap_stat_array,$ap_stat->{$ap_stat_key});
}

编辑:我稍微改了一下,但仍然无法弄清楚下一步是什么。我想我想将打印输出存储到数组中,然后将它们连接起来并打印出连接的数组,但我不确定如何。

编辑:这是我想要的输出:

AP-01 = 1
AP-02 = 1
AP-03 = 2
AP-04 = 1

等。

更多编辑:我将值输入数组,现在我只是想让输出正确。

1 个答案:

答案 0 :(得分:0)

使用List :: MoreUtils qw(pairwise)计算它;来自here

if (! defined $ap_stat || ! defined $ap_name) {
    die "Failed to get OID '$ap_stat_oid': " . $session->error;
    $session->close();
}
my @ap_name_array;
foreach my $ap_name_key (keys %$ap_name) {
        push(@ap_name_array,$ap_name->{$ap_name_key});
}
my @ap_stat_array;
foreach my $ap_stat_key (keys %$ap_stat) {
        push(@ap_stat_array,$ap_stat->{$ap_stat_key});
}

print pairwise { "$a = $b\n" } @ap_name_array, @ap_stat_array;

打败你@ThisSuitIsBlackNot,谢谢!