• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Доопросить сервер

  • Автор темы Shouldercannon
  • Дата начала
S

Shouldercannon

Пришедший ответ помещаю в переменную типа string. Далее выполняю проверку на наличие \final\\queryid\ в пришедшем ответе
Код:
if not (Copy(qqq, Pos('\final\\queryid\', qqq), 16) = '\final\\queryid\') then // опросить повторно и опрашивать до тех пор пока в конце не будет \final\\queryid\
Как провести цикл проверки?
 
S

sinkopa

Пришедший ответ помещаю в переменную типа string. Далее выполняю проверку на наличие \final\\queryid\ в пришедшем ответе
Код:
if not (Copy(qqq, Pos('\final\\queryid\', qqq), 16) = '\final\\queryid\') then // опросить повторно и опрашивать до тех пор пока в конце не будет \final\\queryid\
Как провести цикл проверки?

Не вижу проблем...
За исключением:
1. Ответ сервера может не содержать '\final\\queryid\' НИКОГДА...
2. Сервер может не ответить вообще... ну допустим... если обиделся... :rolleyes:

я бы сделал так:
Код:
// функция опрашивающая сервер
function RequestToServer(out qPath: string): Boolean;
var
ans: string;
begin
Result := False;
qPath := '';
// ... спрашиваем у сервера. Если ответил - Result := True;

if Result then
qPath := ans;
end;
в коде программы
Код:
procedure TFormClient.Button2Click(Sender: TObject);
var
ResponseOK: Boolean;
AttemptsCount: Integer;
qqq: string;
Found : Boolean;
begin
Found := False;
AttemptsCount := 1000; // количество попыток спросить у сервера

ResponseOK := RequestToServer(qqq);
if ResponseOK then
Found := (Copy(qqq, Pos('\final\\queryid\', qqq), 16) = '\final\\queryid\');

while ResponseOK and not Found do
begin
Dec(AttemptsCount);
Application.ProcessMessages;
Sleep(100); // чуток подождали
ResponseOK := (AttemptsCount > 0) and RequestToServer(qqq);
if ResponseOK then
Found := (Copy(qqq, Pos('\final\\queryid\', qqq), 16) = '\final\\queryid\');
end;

if Found then
ShowMessage('Дожались!')
else
ShowMessage('Не дожались!')

end;
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!