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",
          $session->hostname(), $result->{$oid};
      }    
      $cv->end();      
      &doit();              
}


$cv->recv(); 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值