2017-02-16 8 views
-1

最初のget_tableがWLANコントローラからAPステータスを取得し、次にget_requestを使用してAPのホスト名を取得してステータステーブルを表示します。私が抱えている問題は、$ ap_nameが配列として戻ってくるということです。perl - SNMPからホスト名とAPステータスを解決する

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 

など。

より編集:私は今、私はちょうど右の出力を取得しようとしている、配列に値を得ました。

+0

ハッシュへの参照は、VarBindListの内容を含むブロッキングモードで返されます。ノンブロッキングモードでは、エラーが発生していないときに真の値が返されます。どちらのモードでも、エラーが発生すると未定義の値が返されます。エラーの原因を特定するには、error()メソッドを使用できます。 – Pradeep

+0

私もそれを読んでいますが、私は非ブロックでget_tableが必要です。 AP名のために別のセッションを開く必要がありますか? – cflinspach

+0

あなたが実際に使用しているOIDを表示しておけば助けになります。 – ThisSuitIsBlackNot

答えて

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ビート!

関連する問題