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

Форум АНТИЧАТ (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=7966)

bul666 10.07.2005 01:27

Perl - Порт скан
 
Помогите!

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

Плз..

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

bul666 10.07.2005 01:29

Вернее не принцип работы... ) А через что делать... Проюывал через while... Но зашел в тупик!

nerezus 10.07.2005 09:11

Через for по диапазону

nerezus 10.07.2005 09:15

Ладно, объясню полностью:
1. Свернуть айпишники в 1 цифру
2. Цикл фор между этими цифрами
3. В цикле: Развернуть айпишники и выполнить действия(например порты проверять)

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

bul666 11.07.2005 01:58

Я тока начал изучать перл... )

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

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

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

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

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

nerezus 11.07.2005 09:27

Тебе рано этим заниматься.

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

Zadoxlik 11.07.2005 11:19

nerezus, не согласен про свернуть ip в одну цифру, т.к. будет очень много лишней работы. Чтобы гонять IP-ки по циклу надо сделать вложенные циклы, где конечный IP будет монтироваться из переменных полученных после прогона каждого из вложенных циклов причем:

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

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

KEZ 11.07.2005 11:39

Блин. Берешь айпи, берешь порт начальный и пробуешь соедениться.
Берешь след. порт (увелю на 1) и пробуешь...

nerezus 11.07.2005 12:00

Zadoxlik, не говори глупости
спрашиваешь, почему сворачивать? смотри:
прогони от 112.4.6.7 до 112.4.7.1 твоим методом:
сколько машин?

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

nerezus 11.07.2005 12:01

Kez, спор как раз на тему "Берешь айпи"

KEZ 11.07.2005 12:08

Ой, ну ешь нехватало спорить "как взять айпи"...
Берем последнюю цифру, увеличиваем на 1. Потом когда она будет 254 (255, 0 ненадо)
то ставим ее в 0 а ПРЕДПОСЛ. цифру увеличиваем на 1... и т д... только смысл, если в маленькой локалке маска подсети 255.255.255.0 часто бывает...

Zadoxlik 11.07.2005 13:08

Это не глупости. Глупости говоришь ты. Прежде чем назвать это глупостью попробуй написать такую программу и посмотри что получится. Глупость про 0 сказал ты. Вероятно ты не понял организации цикла, ведь в самой глубине окажется цикл, гоняющий последний разрят Ip


Единство что внутри каждого цикла надо будет соблюсти одно условие. Но то что говоришь ты - вот так глупость. Зачем скан портов превращать в трехдневное занятие

nerezus 11.07.2005 13:16

Цитата:

Глупости говоришь ты. Прежде чем назвать это глупостью попробуй написать такую программу и посмотри что получится.
Код:

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


nerezus 11.07.2005 13:19

Цитата:

Зачем скан портов превращать в трехдневное занятие
Трехдневное? =)
Просто набор текста и уничтожение опечаток.


Однако готов посмотреть твой код. Сюда его размести плз., пообсуждаем :)

KEZ 11.07.2005 13:54

Чтото ты накатал кода... Это можно проще написать в несколько строчек...

w00d 11.07.2005 14:02

2kez:
Ну тогда ждем твоего варианта! +)

Zadoxlik 11.07.2005 14:07

нерезус, я писать не буду. И непонятно зачем ты написал - ведь и так понятно что хочешь сделать ты и что я. Только я не понимаю как можно не согласиться с моим вариантом, ведь в твоем КПД меньше 50 процентов.

nerezus 11.07.2005 14:28

Zadoxlik.
В твоем варианте:
1. Надо думать.
2. Возможность появления логической ошибки больше.
3. Вместо 10 строк у меня(разбиение айпи - 1*2, свертывание 1*2, цикл -1, развертка - 4, добавление точек-1) получаем... 9 (разбиение первого айпи - 1, цикл со сравнением со 2 ипом -1, условие - 1*3, действия при условии 1*3, добавление точек). Однако всего 1 строчка разницы. И затраты на твой по времени больше.

Zadoxlik 11.07.2005 14:33

затраты на что ? На написание?

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


Время: 05:56