Seite 1 von 2

Portscanner

Verfasst: 19.03.2006 16:11
von Kyoko12
Hi

Ich hab heute mal nen Portscanner geschreiben, und wollte jetzt von euch wissen, was ihr davon haltet.

Hier der Code:

Code: Alles auswählen

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;Luasiv PortScan v0.01;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;(C) 2006 by Maximilian Mayerl;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;Variablen
port = 0
start_port = 0
end_port = 0
start_port_str$ = ""
end_port_str$ = ""
ip_val = 0
ip_str$ = ""
host$ = ""
connection_id = 0
event.l = 0
current_text$ = ""


;;;Inits
If InitNetwork()
  ;;;
Else
  MessageRequester("Fehler", "Netzwerk konnte nicht initialisiert werden!")
  End
EndIf
  

;;;User-Interface
If OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu, "Luasiv PortScan v0.01")
  ;;;
Else
  MessageRequester("Fehler", "Fenster konnte nicht inizialisiert werden!")
  End
EndIf

If CreateGadgetList(WindowID(0))
  TextGadget(0, 20, 20, 60, 20, "Ziel-IP:")
  StringGadget(1, 90, 18, 100, 20, "")
  TextGadget(2, 20, 50, 60, 20, "Start-Port:")
  StringGadget(3, 90, 46, 100, 20, "")
  TextGadget(4, 20, 80, 60, 20, "End-Port:")
  StringGadget(5, 90, 74, 100, 20, "")
  StringGadget(6, 20, 110, 260, 160, "")
  ButtonGadget(7, 210,18, 80, 35, "Scan")
  ButtonGadget(8, 210, 59, 80, 35, "Stop")
Else
  MessageRequester("Fehler", "User-Interfce konnte nicht initialisiert werden!")
  End
EndIf

If CreateStatusBar(0, WindowID(0))
  AddStatusBarField(200)
  StatusBarText(0, 0, "Fertig")
Else
  MessageRequester("Fehler", "Statusleiste konnte nicht initialisiert werden!")
  End
EndIf


;;;Hauptschleife
Repeat
  event = WaitWindowEvent()
  If event = #PB_Event_Gadget
    Select EventGadgetID()
      Case 0
        ;;;
      Case 1
        ;;;
      Case 2
        ;;;
      Case 3
        ;;;
      Case 4
        ;;;
      Case 5
        ;;;
      Case 6
        ;;;
      Case 7
        ip_str$ = GetGadgetText(1)
        start_port_str$ = GetGadgetText(3)
        end_port_str$ = GetGadgetText(5)
        SetGadgetText(6, "")
        start_port = Val(start_port_str$)
        end_port = Val(end_port_str$)
        end_port = end_port + 1
        port = start_port
        Repeat
          current_text$ = GetGadgetText(6)
          StatusBarText(0, 0, "Scanne Port: "+ Str(port))
          event = WindowEvent()
          If event = #PB_Event_Gadget
            Select EventGadgetID()
              Case 8
                Break 1
            EndSelect 
          EndIf 
          If OpenNetworkConnection(ip_str$, port)
            SetGadgetText(6, current_text$ + "Port " + Str(port) + " offen!" + Chr(10))
          Else
            ;;;
          EndIf
          port = port + 1
        Until port = end_port
        StatusBarText(0, 0, "Fertig")
    EndSelect
  EndIf
Until WindowEvent() = #PB_Event_CloseWindow

Verfasst: 19.03.2006 16:23
von ts-soft
Eventschleife in der Eventschleife und 2x Select EventGadgetID() kann nicht
vernünftig funktionieren :freak:

Verfasst: 19.03.2006 16:26
von NicTheQuick
@Kyoko12:
Für Portscanner gab es schon einmal einen riesigen Thread.
Wenn Feedback erwünscht ist, dann ist das hier das falsche Forum.
Hab das Teil jetzt aber noch nicht ausprobiert.

@ts-soft: So wie er das hier benutzt, funktioniert das schon, ist nur
ziemlich ungewöhnlich.

Verfasst: 19.03.2006 16:27
von Kyoko12
Also, hat bis jetzt keine Probleme gemacht, ausser dass die Benutzeroberfläche während eines Scans sehr langsam zB auf das Drücken es Stop-Buttons reagiert. Das kommt vom 2. Select EventGadgetID().
Aber funktionieren tut alles.

mfg,
Maximilian Mayerl

Verfasst: 19.03.2006 16:38
von mk-soft
Nicht schlecht. Ist eine wenig langsam, aber das liegt daran das OpenNetworkConnection() der Timeout so lange eingestellt ist.
Das Programm konnte nicht Beendet werden wegen doppelte Abfrage von Windowsevent(). Nach finden eines Port´s sollte der Port´s wieder geschlossen werden. Dieses Erweitert.

Code: Alles auswählen

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;Luasiv PortScan v0.01;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;(C) 2006 by Maximilian Mayerl;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;Variablen
port = 0
start_port = 0
end_port = 0
start_port_str$ = ""
end_port_str$ = ""
ip_val = 0
ip_str$ = ""
host$ = ""
connection_id = 0
event.l = 0
current_text$ = ""


;;;Inits
If InitNetwork()
  ;;;
Else
  MessageRequester("Fehler", "Netzwerk konnte nicht initialisiert werden!")
  End
EndIf
 

;;;User-Interface
If OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu, "Luasiv PortScan v0.01")
  ;;;
Else
  MessageRequester("Fehler", "Fenster konnte nicht inizialisiert werden!")
  End
EndIf

If CreateGadgetList(WindowID(0))
  TextGadget(0, 20, 20, 60, 20, "Ziel-IP:")
  StringGadget(1, 90, 18, 100, 20, "")
  TextGadget(2, 20, 50, 60, 20, "Start-Port:")
  StringGadget(3, 90, 46, 100, 20, "")
  TextGadget(4, 20, 80, 60, 20, "End-Port:")
  StringGadget(5, 90, 74, 100, 20, "")
  StringGadget(6, 20, 110, 260, 160, "")
  ButtonGadget(7, 210,18, 80, 35, "Scan")
  ButtonGadget(8, 210, 59, 80, 35, "Stop")
Else
  MessageRequester("Fehler", "User-Interfce konnte nicht initialisiert werden!")
  End
EndIf

If CreateStatusBar(0, WindowID(0))
  AddStatusBarField(200)
  StatusBarText(0, 0, "Fertig")
Else
  MessageRequester("Fehler", "Statusleiste konnte nicht initialisiert werden!")
  End
EndIf

Exit = 0

;;;Hauptschleife
Repeat
  event = WaitWindowEvent()
  If event = #PB_Event_Gadget
    Select EventGadgetID()
      Case 0
        ;;;
      Case 1
        ;;;
      Case 2
        ;;;
      Case 3
        ;;;
      Case 4
        ;;;
      Case 5
        ;;;
      Case 6
        ;;;
      Case 7
        ip_str$ = GetGadgetText(1)
        start_port_str$ = GetGadgetText(3)
        end_port_str$ = GetGadgetText(5)
        SetGadgetText(6, "")
        start_port = Val(start_port_str$)
        end_port = Val(end_port_str$)
        end_port = end_port + 1
        port = start_port
        Repeat
          current_text$ = GetGadgetText(6)
          StatusBarText(0, 0, "Scanne Port: "+ Str(port))
          event = WindowEvent()
          If event = #PB_Event_Gadget
            Select EventGadgetID()
              Case 8
                Break 1
            EndSelect
          EndIf
          Connection = OpenNetworkConnection(ip_str$, port)
          If Connection <> 0
            SetGadgetText(6, current_text$ + "Port " + Str(port) + " offen!" + Chr(10))
            CloseNetworkConnection(Connection)
            Connection = 0
          Else
            ;;;
          EndIf
          port = port + 1
        Until port = end_port
        StatusBarText(0, 0, "Fertig")
    EndSelect
  ElseIf event = #PB_Event_CloseWindow
    Exit = 1
  EndIf
Until Exit
 
FF :allright:

Verfasst: 19.03.2006 16:42
von Kyoko12
Danke für die Tipps!
Kann ich denn den Timeout von OpenNetworkConnection() irgnedwie verstellen??

mfg,
Maximilian Mayerl

Verfasst: 19.03.2006 16:52
von ts-soft
>> @ts-soft: So wie er das hier benutzt, funktioniert das schon
Programme die nur über den Taskmanager beendet werden können, empfinde ich als nicht funktional. Aber egal :mrgreen:

Verfasst: 19.03.2006 17:01
von Kyoko12
Das nur über den Task-Manager beenden kam wegen dem 2. WindowEvent.

Hab jetzt am Ende einfach stehen:

Until event = #PB_Event_CloseWindow

Da event ja schon oben durch ein WaitWindowEvent() definiert wurde, funktioniert das wunderbar! Aber mit den Select...Case und Repeat...Until Schleifen hatte das nix zu tun :wink:

mfg,
Maximilian Mayerl

Verfasst: 19.03.2006 17:08
von mk-soft
@ts-soft
Die Macke habe ich gefunden und beseitig.

Für die Timeout einstellung habe noch nichts in der MSDN gefunden.

Zum ausprobieren ist das Beispiel so Ok. Aber ich selber nehme zum Testen von Netzwerken lieber ein Fertiges Programm "IPSCAN.EXE"

http://ipscan.sourceforge.net/

FF :wink:

Verfasst: 19.03.2006 17:11
von Kyoko12
Ja, das ist mir schon klar, zum Scannen von Netzwerken nehmen ich LanGuard und Retina! Ich wollt eben nur mal nen Portscanner programmieren, mir war eben langweiligm udn wenn mir langweilig ist mach ich immer Netzwerk-Sachen in PB :wink:

Meistens ein Remote-Controll Programm oder so was ähnliches 8)

mfg,
Maximilia Mayerl