
PortScan
PortScan
Hat jemand eine Ahnung wie man mit PB seinen PC auf offene Ports (TCP/IP) scannen kann?


__________________________________________
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
Als fortgeschrittener Anfänger würde ich sagen, du gehst alle 65535 Ports einmal durch.
Per Hand natürlich nur, wenn du wahnsinnig bist
, denn dafür gibt es ja die For-Schleife:
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
Per Hand natürlich nur, wenn du wahnsinnig bist

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
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
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
- hardfalcon
- Beiträge: 3447
- Registriert: 29.08.2004 20:46
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).
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
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
And we're out of beta. We're releasing on time.
ich hab mal was gefunden
Port und anderes check
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.
Es läßt mir keine Ruhe. Warum gibt er den Inhalt der Liste nicht aus?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
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
And we're out of beta. We're releasing on time.
WOW, da habe ich ja was losgetreten
@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:
mal sehen wie man das Problemchen beheben kann ...


@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

__________________________________________
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
Ja, das passiert bei mir gelegendlich auch. Offenbar kommt Windows nicht so gut mit den vielen Threads gleichzeitig klar.DataMiner hat geschrieben:@Laurin
Klasse Idee!
Leider produziert dein Code bei mir einen "invalid memory access" in Zeile 9, Thread 709
Vielleicht hilfts, wenn man nur um die 500 Threads gleichzeitig ausführt.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
And we're out of beta. We're releasing on time.
PureBasic ist nicht threadsicher, und Du verwendest hier imLaurin hat geschrieben:Ja, das passiert bei mir gelegendlich auch. Offenbar kommt Windows nicht so gut mit den vielen Threads gleichzeitig klar.DataMiner hat geschrieben:@Laurin
Klasse Idee!
Leider produziert dein Code bei mir einen "invalid memory access" in Zeile 9, Thread 709
Vielleicht hilfts, wenn man nur um die 500 Threads gleichzeitig ausführt.
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
der Zustand der Linkedlist unstabil.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck