Seite 1 von 5

PortScan

Verfasst: 28.10.2005 14:24
von DataMiner
Hat jemand eine Ahnung wie man mit PB seinen PC auf offene Ports (TCP/IP) scannen kann?

:?

Verfasst: 28.10.2005 15:17
von AND51
Als fortgeschrittener Anfänger würde ich sagen, du gehst alle 65535 Ports einmal durch.
Per Hand natürlich nur, wenn du wahnsinnig bist :lol: , denn dafür gibt es ja die For-Schleife:

Code: Alles auswählen

InitNetwork()
For i = 1 To 65535
   temp = OpenNetworkConnection("AND-Computer", i)
   If temp
      CloseNetworkConnection(temp)
      Debug Str(i)+". Port ist offen"
      Beep_(2500, 750)
   Else
      Debug Str(i)+". Port ist zu oder Verbindung konnte nicht hergestellt werden."
   EndIf
Next
End
i wird bei jedem For-Schleifendurchlauf um eins erhöht.
Es wird versucht, eine Verbindung zu AND-Computer (kann IP Adresse oder Hostname sein) aufzubauen. Die VerbindungsID wird in temp gespeichert. Bei Erfolg ist temp größer als 0. Wenn temp größer als 0, dann schließe die Verbindung wieder und gebe die entsprechende Meldung aus. Bei Erfolg wird zusätzlich ein Piepton ausgegeben.
Nächster Schleifendurchlauf.

Allerdings habe ich beim Testen festgestellt, dass er bei mir nur 1 Port pro Sekunde scannt. Das heißt, er bräuchte 18 Stunden und 12 Minuten, um alle Ports zu scannen.
Beschränke dich daher auf einen bestimmten Bereich oder scanne mit einer selbstegschriebenen EXE die ersten 1.000, mit 'ner anderen EXe die nächsten 10.000 oder so...
Der erste bei mir offene Port ist der Port 135, das ergab der Test. Und während ich hier so schreibe, hat er gerade mal 631 Ports gescannt (und zwischendurch war einer an der Tür und ich musste Kaffee kochen...), also auf jedenfall die Ports aufteilen, wenn du alle scannen willst.

MfG, AND51

Verfasst: 28.10.2005 16:07
von Laurin
Öffne doch mehrere tausend Ports gleichzeitig, zB mit Threads.

Ich versuch da mal was zu basteln.

Verfasst: 28.10.2005 16:29
von hardfalcon
Wenn du nur sehen willst, welche Ports an nem bestimmten PC offen sind (ohne die Daten jetzt großartig weiterzuverwenden), dann tuts der
"Shields Up!"-Test von grc.com sicher auch... :wink:

Verfasst: 28.10.2005 16:45
von Laurin
Das funktioniert soweit. Bei mir dauert der Port-Test ca. 77 Sekunden (Schnapszahl ^^).

Allerdings, und das ist mir unverständlich, gibt er die Ports nicht aus, obwohl sie sich in der Liste befinden. Du musst im Debugger unter "Variablen" dir den Inhalt der Liste OpenPorts() anschauen.

Noch eine Warnung: Das Programm setzt den Rechner auf 100% CPU-Last. Im Schnitt verbraucht es bei mir 24 MB RAM, trotzdem wird die Windows-Auslagerungsdatei um etwa 100 MB vergrößert. Wer eine Firewall an hat, sollte sie lieber ausschalten, eventuell stürzt sie ab (oder dieses Programm).

Code: Alles auswählen

InitNetwork()

NewList OpenPorts.l()
NewList Threads.l()


Procedure PortCheckThread(Port.l)
  ConnectionID = OpenNetworkConnection("127.0.0.1", Port)
  If ConnectionID
    CloseNetworkConnection(ConnectionID)
    AddElement(OpenPorts())
    OpenPorts() = Port
  EndIf
EndProcedure

Anfangszeit = ElapsedMilliseconds()

Debug "Starte PortCheck..."
For Port = 1 To 65535 ; Für jeden Port einen Thread starten
  AddElement(Threads())
  Threads() = CreateThread(@PortCheckThread(), Port)
  Debug "Thread #" + Str(Port) + " gestartet. Thread-Handle: " + Str(Threads())
  Delay(0)
Next

Debug "Warte, bis die Threads abgearbeitet sind..."
For i = 1 To 65535 ; Gucken, ob auch alle Threads beendet sind.
  SelectElement(Threads(), i)
  WaitThread(Threads())
  Delay(0)
Next

Endzeit = ElapsedMilliseconds()

Debug "Verarbeitung hat " + StrF((Endzeit - Anfangszeit)/1000) + " Sekunden gedauert."

Ergebnis = CountList(OpenPorts()) ; Jetzt schauen wir uns mal das Ergebnis an.
If Ergebnis > 1
  Debug Str(Ergebnis) + " offene Ports gefunden. Geöffnet sind:"
  
  FirstElement(OpenPorts())
  For i = 1 To Ergebnise 
    Debug Str(OpenPorts())
    NextElement(OpenPorts())
  Next
Else
  Debug "Keine Ports offen."
EndIf

CallDebugger

Debug "Programm beendet."
End

Verfasst: 28.10.2005 23:27
von sen-me
ich hab mal was gefunden
Port und anderes check
Portscan
Bei dieser Prüfung versucht der Online-Check, sich auf unterschiedlichen Ports mit Ihrem Computer zu verbinden um eventuelle Lücken aufzuzeigen.
Achtung! Desktop-Firewalls müssen für diesen Test deaktiviert werden!



Sicherheits-Test
Bei dieser Prüfung versucht der Online-Check gezielt, Informationen über Ihren PC bzw. über Ihr Netzwerk herauszufinden.



Exploit-Test
Bei dieser Prüfung versucht der Online-Check, bekannte Sicherheits-Lücken in Programmen zu finden, die auf Ihrem PC installiert sind.
Hinweis: Dieser Test ist nur für den Internet Explorer verfügbar.



Browser-Check
Bei dieser Prüfung wird die Browser-Konfiguration untersucht und eventuelle Schwachstellen aufgezeigt.
Hinweis: Dieser Test ist nur für den Internet Explorer verfügbar.

Verfasst: 29.10.2005 00:27
von Laurin
Laurin hat geschrieben:Allerdings, und das ist mir unverständlich, gibt er die Ports nicht aus, obwohl sie sich in der Liste befinden. Du musst im Debugger unter "Variablen" dir den Inhalt der Liste OpenPorts() anschauen.

Code: Alles auswählen

Ergebnis = CountList(OpenPorts()) ; Jetzt schauen wir uns mal das Ergebnis an.
If Ergebnis > 1
  Debug Str(Ergebnis) + " offene Ports gefunden. Geöffnet sind:"
  
  FirstElement(OpenPorts())
  For i = 1 To Ergebnise 
    Debug Str(OpenPorts())
    NextElement(OpenPorts())
  Next
Else
  Debug "Keine Ports offen."
EndIf

Debug "Programm beendet."
End
Es läßt mir keine Ruhe. Warum gibt er den Inhalt der Liste nicht aus?

Verfasst: 29.10.2005 09:45
von DataMiner
WOW, da habe ich ja was losgetreten :D

@AND51
Die Idee mit OpenNetworkConnection hatte ich auch.
... mit dem gleichen Geschindigkeitsproblem.

@hardfalcon / sens-me
Leider so nicht, ich hätte gerne eine Liste mit offenen Ports "von drinnen nach draußen". Diese Online-Tests bleiben meistens schon am Router hängen.


@Laurin
Klasse Idee!
Leider produziert dein Code bei mir einen "invalid memory access" in Zeile 9, Thread 709

Das Auslesen der LinkList würde ich eher so machen:

Code: Alles auswählen

Ergebnis = CountList(OpenPorts()) ; Jetzt schauen wir uns mal das Ergebnis an.
If Ergebnis > 1
  Debug Str(Ergebnis) + " offene Ports gefunden. Geöffnet sind:"
  ResetList(OpenPorts())
  ForEach OpenPorts()
    Debug Str(OpenPorts())
  Next
Else
  Debug "Keine Ports offen."
EndIf
mal sehen wie man das Problemchen beheben kann ...
:allright:

Verfasst: 29.10.2005 11:39
von Laurin
DataMiner hat geschrieben:@Laurin
Klasse Idee!
Leider produziert dein Code bei mir einen "invalid memory access" in Zeile 9, Thread 709
Ja, das passiert bei mir gelegendlich auch. Offenbar kommt Windows nicht so gut mit den vielen Threads gleichzeitig klar.
Vielleicht hilfts, wenn man nur um die 500 Threads gleichzeitig ausführt.

Verfasst: 29.10.2005 12:04
von Danilo
Laurin hat geschrieben:
DataMiner hat geschrieben:@Laurin
Klasse Idee!
Leider produziert dein Code bei mir einen "invalid memory access" in Zeile 9, Thread 709
Ja, das passiert bei mir gelegendlich auch. Offenbar kommt Windows nicht so gut mit den vielen Threads gleichzeitig klar.
Vielleicht hilfts, wenn man nur um die 500 Threads gleichzeitig ausführt.
PureBasic ist nicht threadsicher, und Du verwendest hier im
Thread auch noch eine globale Linkedlist. Wundert mich nicht
das da etwas durcheinander kommt oder crasht.

Wenn ein Thread zwischen den 2 folgenden Zeilen unterbrochen
wird, und ein anderer Thread dann die Linkedlist manipuliert, hast Du
schon Chaos:

Code: Alles auswählen

    AddElement(OpenPorts())
    OpenPorts() = Port
Wird der Thread mitten im AddElement() unterbrochen, ist
der Zustand der Linkedlist unstabil.