Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: Kleiner und schneller Portscanner (nonVCL) mit EXE!

  Alt 2. Aug 2003, 20:57
Zitat:
Ich sehe da keine Lücken
Also entweder schnalle ich da was nicht oder ich kann dein Source nicht lesen. Hier noch mal die Tabelle aber erweitert:


Code:
ThreadIndex = I   Portnummern im Thread

              0  =    1   7   13 
              1  =    2   8   14 
              2  =    3   9   15 
          ------------------------ 
              3  =    4  10   16 
              4  =    5  11   17
              5  =    6  12   18
Man will vom Port 1 bis 18 scannen und möchte dazu 6 Threads benutzen.
In deiner Loop mit CreateThread() gehst du von I := 0 to IP.NumThreads -1, wobei IP.NumThreads := 6 ist. Um mit diesen 6 Threads bis Port 18 zu scannen muß jeder Thread 3 mal pingen. So wie oben in der Tabelle dargestellt. Nun kann das OS nur 3 = DREI Threads erstellen, d.h. deine CreateThread() Schleife erzeugt Thread Nummer 0,1,2 schlägt aber fehl bei Thread Nummer 3,4,5. Deine while Schleife im Thread Code sieht so aus.

Delphi-Quellcode:
    while (IP.StartPort + i + Counter) <= IP.EndPort do
    begin
// Scan ports ...
      if ScanTCPPort(IP.IP, IP.StartPort + i + Counter, TCPsock) then
        PostMessage(hDlg, WM_ADDIP_TCPCONNPORT, IP.IP, IP.StartPort + i + Counter)
      else
        PostMessage(hDlg, WM_ADDIP_TCPPORT, IP.IP, IP.StartPort + i + Counter);

// Increase by number of threads
      inc(Counter, IP.Numthreads);
    end;
Damit würde Thread 0 bei Port 19 terminieren, Thread 1 bei Port 20 und Thread 2 bei Port 21. Die Ports 4,5,6,10,11,12,16,17,18 würden aber nicht gescannt da Thread 3,4,5 überhaupt nicht durch das OS erzeugt wurden.

So das nenne ich Lücken.

Wenn ich dennoch falsch liege dann kläre mich bitte auf, denn durch deinen Kommentar habe ich das Gefühl bekommmen das ich da was nicht schnalle.

Gruß Hagen
  Mit Zitat antworten Zitat