Просмотр полной версии : Perl - Порт скан
Помогите!
Нужен скрипт для сканирования портов...
Плз..
Ну или хотябы принцип работы... )
Вернее не принцип работы... ) А через что делать... Проюывал через while... Но зашел в тупик!
Ладно, объясню полностью:
1. Свернуть айпишники в 1 цифру
2. Цикл фор между этими цифрами
3. В цикле: Развернуть айпишники и выполнить действия(например порты проверять)
Это все, что тебе надо(причем детально), если, конечно, ты перл знаешь =)
Я тока начал изучать перл... )
Непонял следуюзее:
1. Свернуть айпишники в 1 цифру (Всмысле назначить например: $fip = "Тут начальный IP"; и $sip = "Еонечный IP"; ??????
2. Плохо знаю for ((
Наверно надо: for i= 'начальный порт' to 'конечный порт'
3. Какой функицией проверятть IP ??? Использовать Socket?
Тебе рано этим заниматься.
Типа: Делаю робота. Он почему-то не работает. А что это за штучки-дрючки внутри должны быть?
Zadoxlik
11.07.2005, 11:19
nerezus, не согласен про свернуть ip в одну цифру, т.к. будет очень много лишней работы. Чтобы гонять IP-ки по циклу надо сделать вложенные циклы, где конечный IP будет монтироваться из переменных полученных после прогона каждого из вложенных циклов причем:
Всего циклов будет 4 (если речь идет о прогоне диапазона на один порт, вслучае прогона IP на много портов - цикл один и IP конечно монтировать ненадо, вслучае прогона диапазона IP на диапазон портов - циклов еще больше), состовляющие IP-адреса должны изменяться от 0-255.
Работа с полученным IP: установить сокетное соединение с данным IP к данному порту. Вслучае неудачи - порт закрыт, вслучаеудачи - открыт, закрыть сокетное соединение и по новой.
Блин. Берешь айпи, берешь порт начальный и пробуешь соедениться.
Берешь след. порт (увелю на 1) и пробуешь...
Zadoxlik, не говори глупости
спрашиваешь, почему сворачивать? смотри:
прогони от 112.4.6.7 до 112.4.7.1 твоим методом:
сколько машин?
в четвертом цикле будет от 7 до 1 с шагом +1
сколько это? правильно, ноль
поэтому надо свернуть
Kez, спор как раз на тему "Берешь айпи"
Ой, ну ешь нехватало спорить "как взять айпи"...
Берем последнюю цифру, увеличиваем на 1. Потом когда она будет 254 (255, 0 ненадо)
то ставим ее в 0 а ПРЕДПОСЛ. цифру увеличиваем на 1... и т д... только смысл, если в маленькой локалке маска подсети 255.255.255.0 часто бывает...
Zadoxlik
11.07.2005, 13:08
Это не глупости. Глупости говоришь ты. Прежде чем назвать это глупостью попробуй написать такую программу и посмотри что получится. Глупость про 0 сказал ты. Вероятно ты не понял организации цикла, ведь в самой глубине окажется цикл, гоняющий последний разрят Ip
Единство что внутри каждого цикла надо будет соблюсти одно условие. Но то что говоришь ты - вот так глупость. Зачем скан портов превращать в трехдневное занятие
Глупости говоришь ты. Прежде чем назвать это глупостью попробуй написать такую программу и посмотри что получится.
#!/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;
}
}
Зачем скан портов превращать в трехдневное занятие
Трехдневное? =)
Просто набор текста и уничтожение опечаток.
Однако готов посмотреть твой код. Сюда его размести плз., пообсуждаем :)
Чтото ты накатал кода... Это можно проще написать в несколько строчек...
2kez:
Ну тогда ждем твоего варианта! +)
Zadoxlik
11.07.2005, 14:07
нерезус, я писать не буду. И непонятно зачем ты написал - ведь и так понятно что хочешь сделать ты и что я. Только я не понимаю как можно не согласиться с моим вариантом, ведь в твоем КПД меньше 50 процентов.
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
затраты на что ? На написание?
Все больше писать тут не буду. Повторяться только и тебе и мне
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot