Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi PortScanner -> Programm gibt keine Rückmeldung (https://www.delphipraxis.net/4290-portscanner-programm-gibt-keine-rueckmeldung.html)

sharkx 22. Apr 2003 21:20


PortScanner -> Programm gibt keine Rückmeldung
 
Huhu :>

Um zu sehen welche Ports bei mir offen sind, habe ich mir fix mal nen Portscanner geschrieben. Es geht auch soweit alles, aber in der zeit wo er scannt, kann ich an dem kleinen Tool absolut nichts mehr machen. Die Prozessor lastung derweil steigt auch nicht sehr in die höhe. An meiner Firewall jedoch sehe ich, das das programm noch am scannen ist.

Der Komplette Source:

Code:
procedure TForm1.Button1Click(Sender: TObject);
var StartPort : integer;
    EndPort : integer;
    i : integer;
begin
  Memo1.Lines.Add('Scanning ' + Edit1.text);
  StartPort := StrToInt(Edit2.Text);
  EndPort := StrToInt(Edit3.Text);
  if StartPort > Endport then
  begin
    MessageDlg('Ending Port have to be higher than starting port!', mtInformation, [mbOk], 0);
    exit
  end
    else
      for i := StartPort to EndPort do
  begin
  Label4.Caption := 'Scanning';
    try
      TcpClient1.Open;
      TcpClient1.RemotePort := IntToStr(i);
      TcpClient1.RemoteHost := Edit1.Text;
      if TcpClient1.Connect then
      Memo1.Lines.add(IntToStr(i));
      Label5.Caption := 'Current Port: ' + IntToStr(i);
      TcpClient1.Close;
         except
      on ESocketError do
        Application.ProcessMessages;
    end;
  end;
  Label4.Caption := 'Finish';
  Memo1.Lines.Add('-------------------------------------')
end;
Auserdem möchte ich ein "Stop" Button haben, jedoch weis ich nicht wie ich die laufende procedur anhalten kann?!

Luckie 22. Apr 2003 21:45

Dein ProcessMessages steht an der falschen Stelle denke ich mal. Das wird ja nur aufgerufen, wenn es zu einem SocketFehler kommt. Setz das mal ein end weiter.

Marco Haffner 22. Apr 2003 21:49

Würd ich auch sagen das ProcessMessages an falscher Stelle steht.
Für einen vorzeitigen Abbruch würde ich es mit einen globale Boolean-Variable probieren, die wird mit False initialisiert und wenn der Stop-Schalter gedrückt wird, die Variable auf True setzen.
In der Schleife dann nur noch überprüfen ob gesetzt und ist dieses der Fall mit Break die Schleife abbrechen.

Mirilin 22. Apr 2003 22:29

Du solltest das ganze Gescanne in ein eigenes TThread-Objekt verschieben.
Dann kannst Du auf dem Hauptprogramm noch klicken -> verarbeiten.

sharkx 23. Apr 2003 00:48

huhu :>

@Lucky, Marco:

Euer vorschlag hat das Problem gelöst. vielen dank!


@Mirlin

Mit TThread-Objecten habe ich leider noch nicht gearbeitet. Daher habe ich 0 Plan wie des so gehen soll :/ Wenn du nen beispiel, oder ein gutes Tutorial darüber hast, wäre des 1a <g>

cu

MathiasSimmack 23. Apr 2003 06:30

Wenn deine C-Kenntnisse gut sind, dann schau dir mal das PC MAGAZIN 5/2003 an. Dort findest du auf der Heft-CD einen Portscanner, der in C geschrieben wurde und Threads benutzt.
Ich habe den Beitrag im PC MAGAZIN aber bisher auch bloß gelesen. Den Code habe ich mir noch nicht angeschaut. Darum kann ich dir auch leider nicht sagen, ob er sich einfach nach Delphi umsetzen lässt ... oder nicht ...

Gruß.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:25 Uhr.

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