|  | 
 
| 一直研究SYN可行的扫描方案,想了一下,自己模拟写了一个, 但是感觉特别不理想。还得修改,mark一下。
 
 
 
 #!/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=<>;
 foreach my $ip (@target){
 foreach my $port (1..65535){
 $q->enqueue(nex($ip,$port));
 }
 }
 print $q->pending;
 #my $se = Thread::Semaphore->new(100);
 #my @check_list;
 #foreach my $ip (@target){
 #   if(${$se} <= 0){
 #     for my $t (threads->list(threads::joinable)){
 #           $t->join();
 #           $se->up();
 #     }
 #     redo;
 #  }
 #  $se->down();
 #  threads->create(\&nex,$ip)
 #}
 #for my $t(threads->list()){
 #  $t->detach();
 #       $t->join();
 #}
 sub nex{
 ($ip,$port)=@_;
 chomp($ip);
 $scan=Net::Ping->new('syn');
 $scan->port_number($port);
 $scan->ping($ip);
 if($scan->ack){
 print "ip:$ip port:$port open\n";
 }
 $scan->close();
 }
 
 | 
 | 
| 
 |