Ладно, объясню полностью: 1. Свернуть айпишники в 1 цифру 2. Цикл фор между этими цифрами 3. В цикле: Развернуть айпишники и выполнить действия(например порты проверять) Это все, что тебе надо(причем детально), если, конечно, ты перл знаешь =)
Я тока начал изучать перл... ) Непонял следуюзее: 1. Свернуть айпишники в 1 цифру (Всмысле назначить например: $fip = "Тут начальный IP"; и $sip = "Еонечный IP"; ?????? 2. Плохо знаю for (( Наверно надо: for i= 'начальный порт' to 'конечный порт' 3. Какой функицией проверятть IP ??? Использовать Socket?
Тебе рано этим заниматься. Типа: Делаю робота. Он почему-то не работает. А что это за штучки-дрючки внутри должны быть?
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 сколько это? правильно, ноль поэтому надо свернуть
Ой, ну ешь нехватало спорить "как взять айпи"... Берем последнюю цифру, увеличиваем на 1. Потом когда она будет 254 (255, 0 ненадо) то ставим ее в 0 а ПРЕДПОСЛ. цифру увеличиваем на 1... и т д... только смысл, если в маленькой локалке маска подсети 255.255.255.0 часто бывает...
Это не глупости. Глупости говоришь ты. Прежде чем назвать это глупостью попробуй написать такую программу и посмотри что получится. Глупость про 0 сказал ты. Вероятно ты не понял организации цикла, ведь в самой глубине окажется цикл, гоняющий последний разрят Ip Единство что внутри каждого цикла надо будет соблюсти одно условие. Но то что говоришь ты - вот так глупость. Зачем скан портов превращать в трехдневное занятие
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; } }
Трехдневное? =) Просто набор текста и уничтожение опечаток. Однако готов посмотреть твой код. Сюда его размести плз., пообсуждаем
нерезус, я писать не буду. И непонятно зачем ты написал - ведь и так понятно что хочешь сделать ты и что я. Только я не понимаю как можно не согласиться с моим вариантом, ведь в твоем КПД меньше 50 процентов.
Zadoxlik. В твоем варианте: 1. Надо думать. 2. Возможность появления логической ошибки больше. 3. Вместо 10 строк у меня(разбиение айпи - 1*2, свертывание 1*2, цикл -1, развертка - 4, добавление точек-1) получаем... 9 (разбиение первого айпи - 1, цикл со сравнением со 2 ипом -1, условие - 1*3, действия при условии 1*3, добавление точек). Однако всего 1 строчка разницы. И затраты на твой по времени больше.