2017-02-16 2 views
-1

첫 번째 get_table은 WLAN 컨트롤러에서 AP 상태를 얻은 다음 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}); 
} 

편집 : 조금 바꿨지 만 다음은 무엇인지 알 수 없습니다. 인쇄 출력을 배열에 저장 한 다음 조인 된 배열을 인쇄하려고하지만 어떻게해야할지 모르겠다 고 생각합니다.

편집 : 여기 내 원하는 출력이있다 :

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

더 편집 : 이제 내가 바로 출력을 얻기 위해 노력하고있어 배열로 값을 얻었다.

+0

해시에 대한 참조는 VarBindList의 내용을 포함하는 차단 모드에서 반환됩니다. 비 차단 모드에서 오류가 발생하지 않으면 true 값이 반환됩니다. 어느 모드에서든 오류가 발생하면 정의되지 않은 값이 반환됩니다. error() 메소드는 실패의 원인을 판별하는 데 사용될 수 있습니다. – Pradeep

+0

나는 그것도 읽었지만 non-blocking으로 get_table이 필요하다. AP 이름 만 다른 세션을 열어야합니까? – cflinspach

+0

사용중인 실제 OID를 표시하면 도움이됩니다. – ThisSuitIsBlackNot

답변

0

목록 :: MoreUtils qw (pairwise); 어쨌든이 @ThisSuitIsBlackNot에 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; 

비트 여러분, 감사에서!