不知道为什么停不下来,坑爹。。
#!/usr/bin/perl use threads; use Thread::Queue; use Thread::Semaphore; use Net::Ping; # create queue my $q=new Thread::Queue; # read for check list my @target=<>; my $se_max = Thread::Semaphore->new( 100 ); foreach my $ip (@target){ chomp($ip); foreach my $port(1..65535){ $q->enqueue("$ip|$port"); } } while(1){ foreach(threads->list(threads::joinable)) { $_->join(); } my $item = $q->pending(); if( $item == 0 ) { my $active = threads->list(threads::running); if($active == 0) { print "全部跑完 "; last; } else { next; } } $se_max->down; threads->create(&nex,$q->dequeue()); } foreach(threads->list()){ $_->join(); } sub nex{ local($tmp)=shift; @list=split(/|/,$tmp); $scan=Net::Ping->new('syn'); $scan->port_number($list[1]); $scan->ping($list[0]); if($scan->ack){ print "ip:$list[0] port:$list[1] open "; } $scan->close(); $se_max->up; }