Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   [PERL] Сканер портов. Требуется помощь (https://forum.antichat.xyz/showthread.php?t=90289)

Sharky 03.11.2008 20:44

[PERL] Сканер портов. Требуется помощь
 
Есть сканер портов на перле...сканит диапазон ипов на один открытый порт...скорость откровенно крейсерная... поправьте ошибки и помогите прикрутить многопоточность
Код:

#!/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>;


biophreak 04.11.2008 00:15

Тут недавно вроде как уже был подобный вопрос...исходники тоже есть)

Sharky 04.11.2008 01:05

я прошу поправить конкретно мой случай

Sharky 05.11.2008 15:32

люди ну ап в конце концов...репой не обижу

PHPoozy 05.11.2008 15:50

ненавижу перл! перл учат лохи. (c) KSURi.

Kaimi 05.11.2008 16:20

Цитата:

ненавижу перл! перл учат лохи. (c) KSURi.
Чоткие пасаны все кодят на асме?

Sharky 05.11.2008 16:32

Kaimi ты же прошарен в перле...помоги новичку освоиться в нём

biophreak 05.11.2008 16:33

Нене...чоткее пасаны ждут похапе 6 и собираются кодить на нем... =\

Spyder 05.11.2008 16:43

чоткие патсаны на кубейсеке кодят
какой то страшный код, особенно вот это повергло в шок
my $fip=$flist[0]*256*256*256+$flist[1]*256*256+$flist[2]*256+$flist[3];
=\\\ это что за пздц? я даже код боюсь разбирать

Помню слип писал небольшой сканер ипов по порту, поищи
Мб канеш с этим кто то поможет, но не я =(

Kaimi 05.11.2008 17:08

Меня пугает код) + Дофига сканеров портов по диапазону быстрых, зачем именно на перле

Sharky 05.11.2008 17:54

ну вот мне нужен конкретно на перле...мож у кого сорцы завалялись? ну или поправьте этот в конце концов..он работает..нужно только могопоточность прикрутить

Kaimi 05.11.2008 18:12

Код:

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>;


zer0ska 05.11.2008 21:04

Один из лучших сканеров портов написан на перл а точнее nmap
Я бы на вашем месте посмотрел его исходники.

Spyder 05.11.2008 21:32

zer0ska
Written in C, C++, Python

[Raz0r] 05.11.2008 21:34

Цитата:

Один из лучших сканеров портов написан на перл а точнее nmap
да ладно :D

PHPoozy 05.11.2008 21:37

Perl умер в 2003 году.

Sharky 05.11.2008 21:48

Kaimi не корректно работает...почему то всегда 10 потоков :(

Kaimi 05.11.2008 21:55

Серверную винду поставь... или патч стек tcp/ip

PHPoozy 05.11.2008 21:58

пёрл умрет. останутся лишь интерпритаторы и все.

Kaimi 05.11.2008 22:08

Точно, давайте дружно песать на яве

PHPoozy 05.11.2008 22:16

Цитата:

пузи, http://www.google.com/search?q=perl6
его обещания только ложь!

P.S.: читайте новости. abc рулит!

PHPoozy 05.11.2008 22:30

Цитата:

ты смешон
кто из нас смешон?

Код HTML:

http://216.239.59.104/search?q=cache:DToLCztY8HUJ:www.tiobe.com/tiobe_index/index.htm+%22Programming+Language+Popularity%22&hl=ru&ct=clnk&cd=2&client=opera

biophreak 05.11.2008 22:33

[offtopic]
Спасибо,поржал :)
PHPoozy: Хм...а то пых под натиском питона, явы и прочего не умрет?
или ты сидишь дро^W молишься на пхп6 ? :))
ЗЫЖ Думаю, тем кому нужен перл или тем кому тупо удобнее на нем писать - для тех он не умрет :)Или предлагаешь писать простые скрипты-однострочники на PHP^W быдлоязыках?
ЗЗЫЖ Все вышенаписанное лишь личное мнение...
[/offtopic]

PHPoozy 05.11.2008 22:36

май ланг ис пайтон. питон всех порвет в скором будущем!

PHPoozy 05.11.2008 22:39

Цитата:

PHPoozy: Хм...а то пых под натиском питона, явы и прочего не умрет?
или ты сидишь дро^W молишься на пхп6 ? )
я молюсь на python 3000 =)

P.S.: PHP 94 тоже не молод.

biophreak 05.11.2008 22:42

Гм...ну ты уж определись чтоли похапе или питон.... :))
В скором будущем, я думаю, уже не надо будет заморачиваться насчет этого, ибо производительность железа будет такой, что хоть на кубейсике клепай cgi, дело каждого - на чем он пишет, может кому-то удобнее пхп, кому-то перл, кому-то C# итд итп...а вот из-за тебя,как видишь - сплошной оффтоп пошел(или ты просто посты набивал) ;)))
ЗЫЖ А вы, товарищ, как я посмотрю - любитель похоливарить на пустом месте :)

PHPoozy 05.11.2008 22:45

Цитата:

ЗЫЖ А вы, товарищ, как я посмотрю - любитель похоливарить на пустом месте
оксиконтин хочешь?

PHPoozy 05.11.2008 22:47

Цитата:

не пойду, там пхп-пинч
да, там вирус! написан на пхп =)

Sharky 05.11.2008 23:22

это надо так засрать тему...2 страницы оффтопа...поналепить бы всем минусов

Sharky 05.11.2008 23:25

Цитата:

Сообщение от Kaimi
Серверную винду поставь... или патч стек tcp/ip

не в этом деле..даже если 2 потока поставлю всё равно делает 10

Kaimi 05.11.2008 23:33

С чего ты взял что создается именно 10 потоков?

Sharky 05.11.2008 23:50

посчитал когда он работал

Kaimi 06.11.2008 11:40

Каким образом?

demond 06.11.2008 12:33

Sharky, там в самом начале было что-то про оптимизацию, так вот у меня вопрос в связи с этим: "А какая именно часть работает долго? Та что вычисляет ip адреса или что осуществляет подключение?"
Соответственно предложение следующее: если долго вычисляются ip-шники, то надо менять код их вычисления! На мой взгляд можно было все это сделать намного проще и передавать в функцию пинг готовый ip.
Если вычисляется сравнительно быстро (по сравнению с пингом), то выносить каждый пинг в отдельный поток. Правда, насколько я знаю, потоки действенны, когда их кол-во до 16 штук.

Sharky 06.11.2008 13:15

сама генерация ипов вроде быстро проходит...а вот коннекты долго
Kaimi они выводятся по 10 штук за раз

demond 06.11.2008 13:23

А на каком диапазоне ты проверяешь? Почему именно 10? если увеличить диапазон, что-то меняется?

Sharky 06.11.2008 13:25

вроде нет

demond 06.11.2008 13:54

А по поводу оптимизации кода:
for (my $i=$fip; $i<=$tip; $i++) заменить на for ($fip .. $tip)
$ip="$d1.$d2.$d3.$d4"; заменить на $ip=join ".", ($d1,$d2,$d3,$d4);
print "$_[0] is Good\n"; заменить на print $_[0]." is Good\n";
После этого производительность должна увеличится на доли миллисекунд. :-) Но это факт!
И вообще вычисление ip-шников вынести в отдельную функцию.
И тогда программа должна работать по следующему алгоритму:
1)Получаем начальный и конечный ip;
2)Вычисляем все ip, которые будем пинговать, и переписываем их в общий массив;
3)Для каждого ip из общего массива создаем отдельный поток, который будет вызывать функцию sock();


Время: 11:19