Delphi-PRAXiS
Seite 2 von 7     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Große String-Liste out of Memory - Hilfe? (https://www.delphipraxis.net/180065-grosse-string-liste-out-memory-hilfe.html)

Sir Rufo 20. Apr 2014 18:51

AW: Große String-Liste out of Memory - Hilfe?
 
Irgendwie erstellst du ja diese Liste, also du erstellst jeden einzelnen Eintrag und fügst diesen in die Liste.

Nun füg den Wert nicht in die Liste, sondern übergib den Wert an die Routine, die etwas damit macht

Pogoner 20. Apr 2014 18:58

AW: Große String-Liste out of Memory - Hilfe?
 
Ja das will ich ja die ganze Zeit:-D Aber wie schon 2x gesagt - ich weiß nicht, wo ich das tun muss. Für mich mit meinem einfachen Delphi-Gemüt liest sich der Code nicht so einfach:?
Delphi-Quellcode:
step1:

        for i := 0 to hlplst.Count -1 do begin
                for n := 1 to length(astring) do begin

                npw := hlplst.Strings[i]+astring[n];

               Cluster.Add(npw);                 //wenn ich das hier entferne, gehts nichtmehr
                                                  //dann kommt nur aa bis a0, aber nicht aaa-aa0 etc
                                                  //sonst hätte ich es hier abgegriffen
                                                  //desweiteren loopt es dann die aa-a0 immer wieder
                if length(npw) >= startlen then
                begin
                Results.Add(npw);                
                end;
        end;
        HlpLst.Clear ;
        hlplst.AddStrings(Cluster);
        Cluster.Clear ;
   

        if length(npw) + 1 <= endlen then goto step1;
        hlplst.Clear;
     end;
        result := 0;
        Label1.Visible := False;
€dit - Und mir ist schon bewusst, dass das für euch wahrscheinlich eine blöde Frage ist.... Sorry^^

Uwe Raabe 20. Apr 2014 19:55

AW: Große String-Liste out of Memory - Hilfe?
 
Wenn ich das jetzt richtig verstanden habe, nimmt man die Buchstaben aus substr und fügt jeweils alle Kombinationen der Buchstaben aus astring an. Die resultierenden Kombinationen werden, so sie eine Länge von startlen bis endlen haben in die Liste result geschrieben und dem Spider übergeben.

Frage: Was passiert mit der Liste results? Die wird in deinem Code nirgendwo sonst verwendet.

Sir Rufo 20. Apr 2014 20:18

AW: Große String-Liste out of Memory - Hilfe?
 
Wenn ich mir das so betrachte, dann ist
Delphi-Quellcode:
Results
die Liste, die ständig wächst.
Sollten diese Werte irgendeine Relevanz haben, dann kann man diese auch direkt in eine Datei schreiben und damit den Speicher entlasten.

Kommentiere zunächst mal das
Delphi-Quellcode:
Results.Add(...);
aus und schau dir den Speicherverbrauch an.

Ich weiß aber nicht, ob ich zum Thema BruteForce und Webseiten hier wirklich weiterhelfen möchte ...

Pogoner 20. Apr 2014 20:37

AW: Große String-Liste out of Memory - Hilfe?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1256297)
Wenn ich das jetzt richtig verstanden habe, nimmt man die Buchstaben aus substr und fügt jeweils alle Kombinationen der Buchstaben aus astring an. Die resultierenden Kombinationen werden, so sie eine Länge von startlen bis endlen haben in die Liste result geschrieben und dem Spider übergeben.

Frage: Was passiert mit der Liste results? Die wird in deinem Code nirgendwo sonst verwendet.

Ja die Results-Liste stammt noch aus dem "Tutorial" - anstatt in die Liste, möchte ich es in den Spider übergeben. Bevor ich das tun kann, wird die Cluster-Liste allerdings zu groß und ich kann ehrlichgesagt mit den Schleifen nicht so gut umgehen, um es im richtigen Moment abzugreifen bzw die Liste wieder freizugeben...

Zitat:

Zitat von Sir Rufo (Beitrag 1256300)
Kommentiere zunächst mal das Results.Add(...); aus und schau dir den Speicherverbrauch an.

Die Results ist ja nur ein Teil der Cluster-Liste. Ich habe sie kommentiert und bin nur 100MB runter, der Großteil ist von der anderen belegt... (Mittelteil meiner Tabelle mit allen Kombinationen)

Zitat:

Zitat von Sir Rufo (Beitrag 1256300)
Sollten diese Werte irgendeine Relevanz haben, dann kann man diese auch direkt in eine Datei schreiben und damit den Speicher entlasten.

Die Werte haben keine Relevanz - außer dass ich sie (wenn sie x Stellen lang sind) dem Spider übergeben möchte

Zitat:

Zitat von Sir Rufo (Beitrag 1256300)
Ich weiß aber nicht, ob ich zum Thema BruteForce und Webseiten hier wirklich weiterhelfen möchte ...

Naja also ich will ja kein Passwort knacken oder etwas ähnliches - es ist mehr eine sportliche Herausforderung, eine versteckete Unterseite zu finden. Diese ist offen zugänglich für den, der den Link kennt - Keine Sorge:wink:

Uwe Raabe 20. Apr 2014 20:55

AW: Große String-Liste out of Memory - Hilfe?
 
Zitat:

Zitat von Pogoner (Beitrag 1256304)
Zitat:

Zitat von Sir Rufo (Beitrag 1256300)
Ich weiß aber nicht, ob ich zum Thema BruteForce und Webseiten hier wirklich weiterhelfen möchte ...

Naja also ich will ja kein Passwort knacken oder etwas ähnliches - es ist mehr eine sportliche Herausforderung, eine versteckete Unterseite zu finden. Diese ist offen zugänglich für den, der den Link kennt - Keine Sorge:wink:

Ganz so unbedarft ist das aber nicht! Nach deiner Aussage kommen da 380204032 Strings zusammen, von denen ein großer Teil zu einem HTML-Call führt. Das kann durchaus schon als Versuch einer DOS-Attacke angesehen werden.

Abgesehen davon wurde dir der passende Lösungsansatz bereits in Post 3 aufgezeigt.

Pogoner 20. Apr 2014 21:13

AW: Große String-Liste out of Memory - Hilfe?
 
Okay, dann muss ich eine Pause einbauen - eine DDOS Attacke möchte ich nicht verursachen, sonst hätte ich mir die Mühe nicht gemacht und einfach LOIC runtergeladen...
Die nichtexistierenden Seiten haben keinen HTML-Titel - also es wird nichts eingetragen...

Ich denke, gemeint mit der Lösung ist die For-While Schleife mit Continue?
Es wäre super-nett wenn mir das jemand als Code-Beispiel aufschreiben könnte, wo mir das mit der Cluster-Listengröße weiterhilft?
Wenn ich nicht mit meinem minderen Wissen schon stundenlang rumgetestet hätte, würde ich euch hier auch nicht darum bitten, mir am besten ein Lösungsbeispiel zu geben...:oops:

Popov 20. Apr 2014 22:02

AW: Große String-Liste out of Memory - Hilfe?
 
Ich habe mir die ganzen Antworten jetzt nicht richtig durchgelesen und so ganz verstehe ich nicht was das Ergebnis sein soll, aber es gibt den alten Spruch: kommt der Prophet nicht zum Berg, muss der Berg zum Propheten kommen (oder so in der Art). Out of Memory bedeutet nicht immer, dass zuwenig RAM allgemein da ist, sondern auch, dass es zu wenig an einem Stück da ist. Wenn also der RAM Speicher nicht ausreicht, wie wäre es wenn du die Liste direkt auf der Festplatte erstellst?

Uwe Raabe 20. Apr 2014 22:03

AW: Große String-Liste out of Memory - Hilfe?
 
Zitat:

Zitat von Pogoner (Beitrag 1256310)
Ich denke, gemeint mit der Lösung ist die For-While Schleife mit Continue?


Eigentlich zielte ich eher auf die Rekursion hin. Also in etwa so:

Delphi-Quellcode:
function TForm1.bruteforce(astring: string;substr: string; startlen: integer; endlen: integer):LongInt;

  procedure CheckURL(const url: string);
  begin
    spider.Initialize(urlk);
    spider.CrawlNext();

    Edit1.Text := Spider.LastUrl;
    Edit2.Text := Spider.LastHtmlTitle;

    If Edit2.Text = 'Vorhanden' then begin
      Memo4.Lines.Add (Edit1.Text);
    end;
  end;

  Procedure TesteString(const Basis: string);
  var
    npw: string;
    I: Integer;
  begin
    for I := 1 to Length(astring) do begin
      npw := Basis + astring[I];
      if startlen <= Length(npw) then begin
        CheckURL(urls + npw);
      end;
      { Abbruchbedingung }
      if Length(npw) < endlen then begin
        { hier probieren wir dann ein Zeichen mehr }
        TesteString(npw);
      end;
    end;
  end;

var
  I: Integer;
begin
  For I := 1 to length(substr) do begin
    TesteString(substr[I]);
  end;
end;
Bei solchen Rekursionen muss man zwar auf seinen Stack aufpassen, aber da der Parameter als const übergeben wird, der lokale string auf dem Heap angelegt wird und die Rekusionstiefe maximal
Delphi-Quellcode:
endlen
ist sollte das kein Problem werden. Diese Lösung verbraucht fast gar keinen Speicher.

Pogoner 20. Apr 2014 23:28

AW: Große String-Liste out of Memory - Hilfe?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1256316)
Bei solchen Rekursionen muss man zwar auf seinen Stack aufpassen, aber da der Parameter als const übergeben wird, der lokale string auf dem Heap angelegt wird und die Rekusionstiefe maximal
Delphi-Quellcode:
endlen
ist sollte das kein Problem werden. Diese Lösung verbraucht fast gar keinen Speicher.

Ich musste 2x lesen:)

Erstmal vielen vielen Dank für die Mühe, mir eine konkrete Lösung hinzuschreiben :thumb:

Also nachdem ich es jetzt geschafft habe, diese Prozeduren richtig zu deklarieren und TForm1 davorzumachen, musste ich es etwas drehen, weil er sonst einen Fehler gebracht hat (; erwartet aber . gefunden bei TForm1"."CheckURL):

Allerdings ist noch irgendein Fehler drin?

Delphi-Quellcode:
function TForm1.bruteforce(astring: string;substr: string; startlen: integer; endlen: integer):LongInt;

{das hier hab ich nach oben}

  var
  I: Integer;

begin
  For I := 1 to length(substr) do begin
    TesteString(substr[I]);
  end;
  end;



procedure TForm1.CheckURL(const url: string);
begin
//spider.Initialize(urlk);
//    spider.CrawlNext();
    showmessage ('CheckURL');
    Edit1.Text := Spider.LastUrl;
    Edit2.Text := Spider.LastHtmlTitle;

    If Edit2.Text = 'Vorhanden' then begin
      Memo4.Lines.Add (Edit1.Text);
      end;
end;

procedure TForm1.TesteString(const Basis: string);
var
    npw: string;
    I: Integer;
  begin
 // Showmessage ('works');                                 //Message kommt
    for I := 1 to Length(astring) do begin
      npw := Basis + astring[I];
  //    showmessage (npw);                                 //Message kommt nicht
      if startlen <= Length(npw) then begin
        CheckURL(urls + npw);
      end;
      { Abbruchbedingung }
      if Length(npw) < endlen then begin
        { hier probieren wir dann ein Zeichen mehr }
 //        showmessage (npw + 'Nr.2');                      //Message kommt nicht
        TesteString(npw);
      end;
    end;
  end;
Angesteuert hab ich es per
Delphi-Quellcode:
bruteforce('abcd','abcd',2,2);
- Aber bis auf die erste Nachricht kommt nichts weiter? :?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 Uhr.
Seite 2 von 7     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz