一直研究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 "; } $scan->close(); }