Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [Delphi] Закачка файлов через сокеты (https://forum.antichat.xyz/showthread.php?t=32623)

Navern 03.02.2007 15:51

[Delphi] Закачка файлов через сокеты
 
День добрый. Помогите, кто чем может, пожалуйста. Есть такая проблема:

Написал брут (как мог, но зато сам) для веб-формы. Отправляю POST-запрос на сервак, оттуда мне приходит ответ: хэдер, где находится нужная мне инфа (если в хэдере есть спец-знак, то значит пароль не подходит) + тело документа.

Как мне сделать так, чтобы после получения хэдера вся страница дальше не качалась? Насколько я понял, именно из-за этого и возникают проблемы со скоростью, поскольку у меня (я мерял) 14-16 вариантов в минуту, а, например, в wwwhack для той же формы и при той же скорости соединения 90-100 вариантов в минуту.

// Ответ от сервера приходит вот так:

Код:

procedure TForm1.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
begin
  FResult:=FResult+Socket.ReceiveText;
end;

Вот как мне из Socket.ReceiveText скачать только первые 500-600 символов? Этого должно хватить, чтобы отловить символ. Ну, или как сделать поиск нужного символа прямо "на лету" во время качалки?

Если нужна какие-то дополнительные данные по исходнику - я дам.

qPhoenix 03.02.2007 17:55

Код:

procedure TForm1.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
begin
  FResult:=FResult+Socket.ReceiveText;
  if pos('искомые_данные', FResult)>0 then ClientSocket.Close;
end;


W!z@rD 04.02.2007 14:21

Цитата:

Сообщение от Navern
1. Вот как мне из Socket.ReceiveText скачать только первые 500-600 символов?
2. Ну, или как сделать поиск нужного символа прямо "на лету" во время качалки?

1.
Код:

var i:Word;
I:=i+Length(Socket.ReceiveText);
if i=>500 then ClentSocket1.Close;

итог: заводишь новую переменную (почeму Word а не SmallInt/Integer? длинна не может быть отрицательной!!!)
2.
Код:

var str:string;
str:=Socket.ReceiveText;
if pos('authorization ok',LowerCase(str))>0 then ClientSocket1.Close;

итог: в str помещаем данные полученные от сокета, функцией pos ищем данные, при том если функция возвращает >0 значит дынне есть. притом все данные переводятся в нижний регистр...

Navern 04.02.2007 16:13

Спасибо, ребят, буду пробовать.


Время: 14:22