Security Teams



:::
  Ответ в темуСоздание новой темы

> FTP Account Checker, (c) drmist
drmist
Дата 11.06.2006 - 21:37
Цитировать сообщение
Offline



Professional
*****

Профиль
Группа: -users-
Сообщений: 1165
Пользователь №: 222
Регистрация: 14.04.2005



Рейтинг:
(0%) -----


Наконец то взялся за изучение перла :)

Код
#! /usr/bin/perl

#
#      ===:::Ftp account checker:::===
#      (c) drmist, all rights reserved
#          web: www.security-teams.net
#

use IO::Socket::INET;

if(@ARGV < 3){ usage(); exit; }

($ftp, $good, $bad) = @ARGV;

open FTP, $ftp or die("[-] $ftp is not readable\n");
open GOOD, ">$good" or die("[-] $good is not writable\n");
open BAD, ">$bad" or die("[-] $bad is not writable\n");

$total_count = $good_count = $bad_count = 0;
print "[+] Work is started!\n";

while($line = <FTP>)
{
 $line =~ s/\r//;
 $line =~ s/\n//;
 if(($login, $pass, $server) = $line =~ /^ftp:\/\/([^:]+):(.+)@([^@]+)$/i)
 {
   $total_count++;
   if(ftp_check($server, $login, $pass) > 0)
   {
     print "[+] $line\n";
     print GOOD "$line\n";
     $good_count++;
   }
   else
   {
     print "[-] $line\n";
     print BAD "$line\n";
     $bad_count++;
   }
 }
}
   
close FTP;
close GOOD;
close BAD;

print "\n\n\n[+] All done!\n    Good: $good_count, ";
print "Bad: $bad_count, Total: $total_count\n";

sub ftp_check()
{
 local $sock;
 local $code;
 local ($server, $login, $pass) = ($_[0], $_[1], $_[2]);
 if($server !~ /:[0-9]{2,5}$/) { $server .= ":21"; } # default port
 $sock = IO::Socket::INET->new($server) or return -2; # connection failed
 if(ftp_answer($sock) != 220) { return -1; }    
 print $sock "USER $login\r\n";
 if(ftp_answer($sock) != 331) { return -1; }
 print $sock "PASS $pass\r\n";
 $code = ftp_answer($sock);
 if($code > 0) { print $sock "QUIT\r\n"; ftp_answer($sock); }
 close $sock;
 return ($code == 230);
}

sub ftp_answer()
{
 local $sock = $_[0];
 local $s = <$sock>;
 local $code;
 
 if(($code) = $s =~ /^([0-9]{3}) /) { return $code; } # one line answer
 elsif(($code) = $s =~ /^([0-9]{3})\-/) # more that one line answer
 { while($s = <$sock>){ if($s =~ /^$code /) { return $code; }}}
 return -1; #invalid ftp server
}

sub usage()
{
 print "\ndrmist's ftp accaunt checker\n";
 print "usage: check.pl <ftp-url's file> <good-log> <bad-log>\n";
 print "for more info visit www.security-teams.net\n\n";
}
PMСайт пользователя
Top
just_RP
Дата 11.06.2006 - 22:13
Цитировать сообщение
Offline



Junior
*

Профиль
Группа: -users-
Сообщений: 30
Пользователь №: 3192
Регистрация: 12.04.2006



Рейтинг:
(0%) -----


А чего не через Net::FTP ?
PM
Top
drmist
Дата 11.06.2006 - 22:22
Цитировать сообщение
Offline



Professional
*****

Профиль
Группа: -users-
Сообщений: 1165
Пользователь №: 222
Регистрация: 14.04.2005



Рейтинг:
(0%) -----


just_RP
У меня на машине такого модуля не оказалось.
Зато IO::Socket::INET был на всех, которых я тестировал (всего я тестировал на 5-6 машинах)

---------[добавлено]---------

Многопоточность не реализованна по той же причине.
PMСайт пользователя
Top

Опции темы Ответ в темуСоздание новой темы

 





Техническая характерестика почтовый пакет полиэтиленовый в Казани. | Отмостка дома цена на сайте www.spb178.com.