Есть сканер портов на перле...сканит диапазон ипов на один открытый порт...скорость откровенно крейсерная... поправьте ошибки и помогите прикрутить многопоточность Code: #!/usr/bin/perl use IO::Socket; use threads; use threads::shared; print "Enter Start Host: "; my $startip=<STDIN>; print "Enter End Host: "; my $endip=<STDIN>; checkrange(); sub checkrange { print "\n Start scaning...\n\n"; my @flist=split(/\./, $startip); my @tlist=split(/\./, $endip); my $fip=$flist[0]*256*256*256+$flist[1]*256*256+$flist[2]*256+$flist[3]; my $tip=$tlist[0]*256*256*256+$tlist[1]*256*256+$tlist[2]*256+$tlist[3]; for (my $i=$fip; $i<=$tip; $i++) { my $tmp=$i; my $d1=int($tmp / (256*256*256)); $tmp=$tmp-$d1*(256*256*256); my $d2=int($tmp / (256*256)); $tmp=$tmp-$d2*(256*256); my $d3=int($tmp / 256); $tmp=$tmp-$d3*256; my $d4=$tmp; my $ip="$d1.$d2.$d3.$d4"; sock($ip); } sub sock { my $sock = new IO::Socket::INET ( PeerAddr => $_[0], PeerPort => '80', PeerProto => 'tcp', t => '5', ); if($sock) { print "$_[0] is Good\n"; }else{ print"$_[0] is Bad\n" } } } print "Scaning finished. Press Enter to exit."; $exit = <STDIN>;
чоткие патсаны на кубейсеке кодят какой то страшный код, особенно вот это повергло в шок my $fip=$flist[0]*256*256*256+$flist[1]*256*256+$flist[2]*256+$flist[3]; =\\\ это что за пздц? я даже код боюсь разбирать Помню слип писал небольшой сканер ипов по порту, поищи Мб канеш с этим кто то поможет, но не я =(
ну вот мне нужен конкретно на перле...мож у кого сорцы завалялись? ну или поправьте этот в конце концов..он работает..нужно только могопоточность прикрутить
Code: use warnings; use IO::Socket; use threads; use threads::shared; print "Enter Start Host: "; my $startip = <>; print "\nEnter End Host: "; my $endip = <>; print "\nThreads number: "; my $thr = <>; print "\n Start scaning...\n\n"; my @flist=split(/\./, $startip); my @tlist=split(/\./, $endip); my $fip=$flist[0]*256*256*256+$flist[1]*256*256+$flist[2]*256+$flist[3]; my $tip=$tlist[0]*256*256*256+$tlist[1]*256*256+$tlist[2]*256+$tlist[3]; my $i : shared = $fip; my @trl; for(0..$thr) {$trl[$_] = threads->create(\&checkrange, $_);} for(@trl) { $_->join; } sub checkrange { while($i<=$tip) { my $tmp; {lock($i); $i++; $tmp=$i;} my $d1=int($tmp / (256*256*256)); $tmp=$tmp-$d1*(256*256*256); my $d2=int($tmp / (256*256)); $tmp=$tmp-$d2*(256*256); my $d3=int($tmp / 256); $tmp=$tmp-$d3*256; my $d4=$tmp; my $ip="$d1.$d2.$d3.$d4"; sock($ip); } } sub sock { my $ip = shift; my $sock = new IO::Socket::INET ( PeerAddr => $ip, PeerPort => '80', PeerProto => 'tcp', t => '5', ); print $sock ? ("$ip is Good\n") : ("$ip is Bad\n"); } print "Scaning finished. Press Enter to exit."; $exit = <STDIN>;
Один из лучших сканеров портов написан на перл а точнее nmap Я бы на вашем месте посмотрел его исходники.