Perl - Порт скан

Discussion in 'PHP' started by bul666, 10 Jul 2005.

  1. bul666

    bul666 Banned

    Joined:
    21 Apr 2005
    Messages:
    280
    Likes Received:
    8
    Reputations:
    -1
    Помогите!

    Нужен скрипт для сканирования портов...

    Плз..

    Ну или хотябы принцип работы... )
     
  2. bul666

    bul666 Banned

    Joined:
    21 Apr 2005
    Messages:
    280
    Likes Received:
    8
    Reputations:
    -1
    Вернее не принцип работы... ) А через что делать... Проюывал через while... Но зашел в тупик!
     
  3. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Через for по диапазону
     
  4. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Ладно, объясню полностью:
    1. Свернуть айпишники в 1 цифру
    2. Цикл фор между этими цифрами
    3. В цикле: Развернуть айпишники и выполнить действия(например порты проверять)

    Это все, что тебе надо(причем детально), если, конечно, ты перл знаешь =)
     
  5. bul666

    bul666 Banned

    Joined:
    21 Apr 2005
    Messages:
    280
    Likes Received:
    8
    Reputations:
    -1
    Я тока начал изучать перл... )

    Непонял следуюзее:

    1. Свернуть айпишники в 1 цифру (Всмысле назначить например: $fip = "Тут начальный IP"; и $sip = "Еонечный IP"; ??????

    2. Плохо знаю for ((

    Наверно надо: for i= 'начальный порт' to 'конечный порт'

    3. Какой функицией проверятть IP ??? Использовать Socket?
     
  6. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Тебе рано этим заниматься.

    Типа: Делаю робота. Он почему-то не работает. А что это за штучки-дрючки внутри должны быть?
     
  7. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    nerezus, не согласен про свернуть ip в одну цифру, т.к. будет очень много лишней работы. Чтобы гонять IP-ки по циклу надо сделать вложенные циклы, где конечный IP будет монтироваться из переменных полученных после прогона каждого из вложенных циклов причем:

    Всего циклов будет 4 (если речь идет о прогоне диапазона на один порт, вслучае прогона IP на много портов - цикл один и IP конечно монтировать ненадо, вслучае прогона диапазона IP на диапазон портов - циклов еще больше), состовляющие IP-адреса должны изменяться от 0-255.

    Работа с полученным IP: установить сокетное соединение с данным IP к данному порту. Вслучае неудачи - порт закрыт, вслучаеудачи - открыт, закрыть сокетное соединение и по новой.
     
  8. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Блин. Берешь айпи, берешь порт начальный и пробуешь соедениться.
    Берешь след. порт (увелю на 1) и пробуешь...
     
  9. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Zadoxlik, не говори глупости
    спрашиваешь, почему сворачивать? смотри:
    прогони от 112.4.6.7 до 112.4.7.1 твоим методом:
    сколько машин?

    в четвертом цикле будет от 7 до 1 с шагом +1
    сколько это? правильно, ноль
    поэтому надо свернуть
     
  10. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Kez, спор как раз на тему "Берешь айпи"
     
  11. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Ой, ну ешь нехватало спорить "как взять айпи"...
    Берем последнюю цифру, увеличиваем на 1. Потом когда она будет 254 (255, 0 ненадо)
    то ставим ее в 0 а ПРЕДПОСЛ. цифру увеличиваем на 1... и т д... только смысл, если в маленькой локалке маска подсети 255.255.255.0 часто бывает...
     
  12. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    Это не глупости. Глупости говоришь ты. Прежде чем назвать это глупостью попробуй написать такую программу и посмотри что получится. Глупость про 0 сказал ты. Вероятно ты не понял организации цикла, ведь в самой глубине окажется цикл, гоняющий последний разрят Ip


    Единство что внутри каждого цикла надо будет соблюсти одно условие. Но то что говоришь ты - вот так глупость. Зачем скан портов превращать в трехдневное занятие
     
    #12 Zadoxlik, 11 Jul 2005
    Last edited: 11 Jul 2005
  13. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Code:
    #!/usr/bin/perl -w
    
    # PortMap by nerezus
    # The Artistic License
    # ICQ 547097
    #
    # A tool for scan ip range
    
    use strict;
    use Socket;
    
    if (@ARGV<2) {print "Usage: portmap.pl from_host(ip) to_host(ip) [portfile.txt(ports via [space])]\n";exit(0);}
    my $fremote=shift||'127.0.0.1';
    my $tremote=shift||'127.0.0.1';
    my $portfile=shift;
    my $ports;
    if ($portfile) {open (PF, $portfile); $ports=<PF>; close(PF);}
       else {$ports="21 80";}
    my @ports=split(/ /, $ports);
    my @flist=split(/\./, $fremote);
    my @tlist=split(/\./, $tremote);
    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";
    	my $host=gethostbyname($ip);
    	foreach my $port (@ports){
    			my $dest=sockaddr_in($port, $host);
    			socket (S, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
    			if (connect(S, $dest)) {
    				print "[".scalar(localtime)."] $ip:$port OK\n";}
    #			   else {print "[".scalar(localtime)."] $ip:$port ERR\n";}
    			close S;
    	}
    }
    
    
    
     
  14. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Трехдневное? =)
    Просто набор текста и уничтожение опечаток.


    Однако готов посмотреть твой код. Сюда его размести плз., пообсуждаем :)
     
    #14 nerezus, 11 Jul 2005
    Last edited: 11 Jul 2005
  15. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Чтото ты накатал кода... Это можно проще написать в несколько строчек...
     
  16. w00d

    w00d [ The Godfather ]

    Joined:
    30 Jun 2005
    Messages:
    172
    Likes Received:
    22
    Reputations:
    4
    2kez:
    Ну тогда ждем твоего варианта! +)
     
  17. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    нерезус, я писать не буду. И непонятно зачем ты написал - ведь и так понятно что хочешь сделать ты и что я. Только я не понимаю как можно не согласиться с моим вариантом, ведь в твоем КПД меньше 50 процентов.
     
    #17 Zadoxlik, 11 Jul 2005
    Last edited: 11 Jul 2005
  18. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Zadoxlik.
    В твоем варианте:
    1. Надо думать.
    2. Возможность появления логической ошибки больше.
    3. Вместо 10 строк у меня(разбиение айпи - 1*2, свертывание 1*2, цикл -1, развертка - 4, добавление точек-1) получаем... 9 (разбиение первого айпи - 1, цикл со сравнением со 2 ипом -1, условие - 1*3, действия при условии 1*3, добавление точек). Однако всего 1 строчка разницы. И затраты на твой по времени больше.
     
  19. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    затраты на что ? На написание?

    Все больше писать тут не буду. Повторяться только и тебе и мне