2017-02-16 24 views
-1

Идея состоит в том, что первая get_table получает статус AP от контроллера WLAN, а затем использует get_request для получения имени хоста AP, поскольку он печатает таблицу состояния. Проблема, с которой я столкнулась, - это $ ap_name, возвращаемая как массив, когда мне просто нужно одиночное значение.perl - разрешить имя хоста и статус AP из SNMP

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}); 
} 

Редактировать: Я немного изменил его, но все еще не могу понять, что дальше. Я думаю, что хочу сохранить выходные данные в массивах, а затем присоединиться к ним и распечатать для объединенного массива, но я не уверен, как это сделать.

Edit: Вот мой желаемый результат:

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

и т.д ..

Больше редактирует: я получил значение в массивы, теперь я просто пытаюсь получить выход направо.

+0

Ссылка на хэш возвращается в режиме блокировки, который содержит содержимое VarBindList. В неблокирующем режиме возвращается истинное значение, если ошибка не возникла. В любом режиме неопределенное значение возвращается при возникновении ошибки. Метод error() может использоваться для определения причины сбоя. – Pradeep

+0

Я тоже это прочитал, но мне нужна get_table в неблокировании. Должен ли я открывать другую сессию только для имени AP? – cflinspach

+0

Это поможет, если вы указали фактические OID, которые используете. – ThisSuitIsBlackNot

ответ

0

Вычислено с использованием списка использования :: MoreUtils qw (попарно); от 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, спасибо в любом случае!