![]() |
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:
Auserdem möchte ich ein "Stop" Button haben, jedoch weis ich nicht wie ich die laufende procedur anhalten kann?!
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; |
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.
|
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. |
Du solltest das ganze Gescanne in ein eigenes TThread-Objekt verschieben.
Dann kannst Du auf dem Hauptprogramm noch klicken -> verarbeiten. |
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 |
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 18:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz