[Delphi] Закачка файлов через сокеты

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Navern, 3 Feb 2007.

  1. Navern

    Navern New Member

    Joined:
    30 Jan 2007
    Messages:
    17
    Likes Received:
    2
    Reputations:
    1
    День добрый. Помогите, кто чем может, пожалуйста. Есть такая проблема:

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

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

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

    Code:
    procedure TForm1.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
    begin
      FResult:=FResult+Socket.ReceiveText;
    end;
    Вот как мне из Socket.ReceiveText скачать только первые 500-600 символов? Этого должно хватить, чтобы отловить символ. Ну, или как сделать поиск нужного символа прямо "на лету" во время качалки?

    Если нужна какие-то дополнительные данные по исходнику - я дам.
     
    #1 Navern, 3 Feb 2007
    Last edited: 3 Feb 2007
  2. qPhoenix

    qPhoenix Banned

    Joined:
    15 Dec 2005
    Messages:
    87
    Likes Received:
    50
    Reputations:
    8
    Code:
    procedure TForm1.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
    begin
      FResult:=FResult+Socket.ReceiveText;
      if pos('искомые_данные', FResult)>0 then ClientSocket.Close;
    end;
    
     
    1 person likes this.
  3. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    1.
    Code:
    var i:Word;
    I:=i+Length(Socket.ReceiveText);
    if i=>500 then ClentSocket1.Close;
    итог: заводишь новую переменную (почeму Word а не SmallInt/Integer? длинна не может быть отрицательной!!!)
    2.
    Code:
    var str:string;
    str:=Socket.ReceiveText;
    if pos('authorization ok',LowerCase(str))>0 then ClientSocket1.Close;
    итог: в str помещаем данные полученные от сокета, функцией pos ищем данные, при том если функция возвращает >0 значит дынне есть. притом все данные переводятся в нижний регистр...
     
    #3 W!z@rD, 4 Feb 2007
    Last edited by a moderator: 4 Feb 2007
    1 person likes this.
  4. Navern

    Navern New Member

    Joined:
    30 Jan 2007
    Messages:
    17
    Likes Received:
    2
    Reputations:
    1
    Спасибо, ребят, буду пробовать.