Schnellerer Port Scann

  • Hallo!

    Ich habe da eine Funktion damit ich herausfinden kann ob auf einem PC VNC läuft.

    Spoiler anzeigen
    [autoit]

    Func PortScan($port, $ip)
    TCPStartUp()
    Opt("TCPTimeout",50)
    $socket = TCPConnect($ip, $port)
    If $socket = -1 Then
    $c = "0x000000"
    $reg = ""
    Return $c
    Else
    TCPCloseSocket($socket)
    $c = "0x00bf00"
    Return $c
    EndIf
    TCPShutdown()
    EndFunc

    [/autoit]

    Es funktioniert auch, nur wenn man auf einen PC gelangt, der den Dienst nicht ausführt, braucht es ewig bis das Script zum nächsten PC weiter geht.
    Meine Frage lautet, wie kann ich das beschleunigen, bzw. gibt es eine andere (einfache) Lösung, um herauszufinden ob ein Dienst (VNC) auf einem PC im Netzwerk läuft?

    Danke im Vorhinein

    If not :?: then ?( else :thumbup:

    • Offizieller Beitrag

    Hallo!

    Ja, diese Funktion hab ich auch in meinem Pingtool (mein erstes wirkliches skript ( ach das waren noch zeiten *gernzurückerinner*)) Also, es gäbe auf jedenfall eine Möglichkeit, die ist natürlich aber nicht unbedingt sauber.. Guck dir mal meine _RunWait Funktion an. Da kann man auch ein timeout für ein Programm festlegen (wann es beendet werden soll..) Jetzt kannst du ein Programm schreiben was mit ConsoleWrite 1 oder 0 zurück gibt und was nur die aufgabe hat zu gucken ob vnc halt läuft.

    So ungefair:
    Das kleine Portscan programm (ich habs portscan.au3 geannant, musst du aber noch im skriptverzeichnis Compelieren!)

    Spoiler anzeigen
    [autoit]

    ;Aufruf über cmdline: diedate.exe IPAdresse PORT
    ;z.B. Portscan.exe 192.168.0.1 5555
    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    If $cmdline[0] < 2 Then Exit 6
    $portsc = PortScan($cmdline[2], $cmdline[1])
    ConsoleWrite($portsc)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func PortScan($port, $ip)
    TCPStartup()
    Opt("TCPTimeout", 50)
    $socket = TCPConnect($ip, $port)
    If $socket = -1 Then
    Return 0
    Else
    Return 1
    EndIf
    TCPShutdown()
    EndFunc ;==>PortScan

    [/autoit]

    Und hier das main prog:

    Spoiler anzeigen
    [autoit]

    MsgBox(0,"",PortScan(80,@IPAddress1,500));Port,IP,maximale zeit in milli sekudnen

    [/autoit] [autoit][/autoit] [autoit]

    Func PortScan($port,$ip,$maxtime);Port,IP,maximale zeit in milli sekudnen
    $get = _RunWait(@ScriptDir&"\portscan.exe "&$ip&" "&$port,@ScriptDir,@SW_HIDE,2,$maxtime)
    If $get = "" Then
    Return 0
    Else
    Return 1
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Function Name: _RunWait
    ; Description:: Wartet bis eine Exe beendet, genauso wie RunWait (autoit) nur mit dem unterschied das die Exe ein Std I/O Stream ausgibt, und das es ein TimeOut gibt
    ; Parameter(s): $sExe: Der Name der Datei (EXE, BAT, COM, PIF), die Ausgeführt werden soll.
    ; $sWorkindir: [optional] Das Arbeitsverzeichnis.
    ; $sFlag: [optional] Das Flag wie das Programm gestartet werden soll (Siehe Run in der AutoIt Hilfe)
    ; $iIOFlag: [optional] Das Handle zu einen oder mehreren STD Input/Output streams des child prozesses. (siehe Run in der AutoIt Hilfe)
    ; $iTimeOut: [optional] Zeitbegrenzung in Millisekunden! Danach wird das Programm automatisch geschlossen.(mit ProcessClose)
    ; Requirement(s): -
    ; Return Value(s): Beim Erfolg: gibt den StdOutread des Programmes aus.
    ; Beim Error:
    ; @error = 1: Das Programm hat ein Error ausgegeben (StdErr)
    ; @error = 2: Das Programm hat ein timeout mit Error ausgabe (StdErr)
    ; @error = 3: Das Programm hat ein timeout mit ganz normaler ausgabe (StdOut)
    ; Author(s): GtaSpider
    ;
    ;===============================================================================
    ;

    Func _RunWait($sFilename,$sWorkingdir="",$sFlag="",$iIOFlag="",$iTimeOut=0)
    Local $pid = Run($sFilename,$sWorkingdir,$sFlag,$iIOFlag)
    If $iTimeOut Then $timer = TimerInit()
    While ProcessExists($pid)
    Sleep(50)
    If $iTimeOut Then
    If TimerDiff($timer) >= $iTimeOut Then ExitLoop
    EndIf
    WEnd
    If ProcessExists($pid) Then
    ProcessClose($pid)
    If StderrRead($pid) <> "" Then Return SetError(2,0,StderrRead($pid))
    Return SetError(3,0,StdoutRead($pid))
    EndIf
    If StderrRead($pid) <> "" Then Return SetError(1,0,StderrRead($pid))
    Return StdoutRead($pid)
    EndFunc

    [/autoit]

    Mfg Spider

  • Hi GTASpider!


    Sorry das ich mich erst jetzt melde aber ich hatte keine Zeit.

    Ist echt ein Hammer dein Script!!!!

    Darf ich es in meinem Programm verwenden?

    Damit ist der Port scann um einiges schneller!

    Noch eine Frage: Gibt es deines Wissen nach schon ein Programm mit dem man VNC verwalten kann!?(auf Autoit Basis oder kennst ein gutes was nicht mit Autoit gemacht worden ist)

    Ich kenne VNCon. Das ist aber was Gruppen anlegen anlangt sehr umständlich.

    Nochmals danke für die Antwort und gib mir bitte bescheid ob ich dein Script verwenden darf.

    Danke

    If not :?: then ?( else :thumbup:

    • Offizieller Beitrag

    Halllo!

    Du darsft es frei verwenden, aber bei der RunWait funktion währe es schön wenn du zumindest da hinschreiben würdest ";by GtaSpider" oder sowas, natürlich kannst du es aber auch so lassen wie es momentan ist ;)

    Ein VNC Manager in autoit gibt es hier: http://www.autoitscript.com/forum/index.php?showtopic=33896

    schön das ich helfen konnte :)

    Mfg Spider

  • Hi!

    Nochmal Danke dafür das du mir das Script zur Verfügung stellst.
    Ich habe den Code so übernommen wie du es geschrieben hast.
    Bis auf die Auswertung im "Main Programm" die habe ich an meine Anforderungen angepasst. Ich hätte wegen dem VNC nicht fragen sollen.
    Jetzt bin ich etwas entmutigt mit meinem Programm weiter zu machen.
    Was ich ganz lustig finde ist das mein Programm Optisch ziemlich ähnlich dem VNCControl ist. Und eins haben die Programmier von dem Programm nicht deine RUNWAIT Funktion. Somit ist der automatische Scann nach VNC Clients ziemlich langsam.

    Concara

    If not :?: then ?( else :thumbup: