anyevent::snmp(2) 扫描地址段

前端之家收集整理的这篇文章主要介绍了anyevent::snmp(2) 扫描地址段前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前面实现了单个ip的anyevent,现在可以实现地址段的扫描.这个和ping很类似.

#/usr/bin/env perl
#测试anyevent::snmp 并发

use AnyEvent;
use AnyEvent::SNMP;
use Net::SNMP;



my $cocurrent = 100;    # 并发数
#my @todoList = map { "192.168.6." . $_ } (1 .. 254); #
my @todoList = ("192.168.6.87","192.168.6.25","192.168.6.45"); #

my $oid=".1.3.6.1.2.1.1.1.0";  #sysDescr


my $cv = AnyEvent->condvar;


doit() foreach 1..$cocurrent;

sub doit{
    my $ip = shift @todoList;
    return if not defined $ip;

    $cv->begin;
   # my $oid=".1.3.6.1.2.1.1.7.0";
   # my @oids=($oid);
   print "$ip.\n";
    my $sess=Net::SNMP->session (-hostname => $ip,-community => "public",-timeout => 1,-nonblocking => 1,-translate   => [-timeticks => 0x0]
                     )
          ->get_request (
           -varbindlist => [ $oid ],#-varbindlist      => \@oids,-callback => sub { done(@_,$ip) }
          );

}

sub done {  
    my ($session,$ip) = @_;
    my $result = $session->var_bind_list();

      if (!defined $result) {
         printf "ERROR: Get request Failed for host '%s': %s.\n",$session->hostname(),$session->error();
                
      }
      else{
          printf "The sysDescr for host '%s' is %s.\n",$result->{$oid};
      }    
      $cv->end();      
      &doit();              
}


$cv->recv(); 

猜你在找的Perl相关文章