IP Scanner

  • Hi habe grad mein script fertiggestellt es ist ein mini IP scanner, der angibt ob andere pcs im netz online sind

    nun finde ich es sehr langsam und wollte fragen ob es möglich ist das script zu beschleunigen

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>

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

    Global $Success = "", $PC, $Value = 0

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

    GUICreate("IPs",500,500,-1,-1,$WS_POPUPWINDOW)
    GUISetFont(10,400,0,"Verdana")
    $List = GUICtrlCreateListView("IP Adresse|Satus",10,10,480,440)
    _GUICtrlListView_SetColumnWidth(-1,0,300)
    $Fortschritt = GUICtrlCreateProgress(60,460,480,20)
    $Label = GUICtrlCreateLabel("0%",10,460,50,20)
    GUISetState(@SW_SHOW)

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

    $Split = StringSplit(@IPAddress1,".")
    $IP = $Split[1] & "." & $Split[2] & "." & $Split[3] & "."

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

    For $Split[4] = 1 To 254 Step +1
    Ping($IP & $Split[4],1)
    If @error Then
    $Value += 0.4
    GUICtrlSetData($Label, $Value & "%")
    GUICtrlSetData($Fortschritt,Int($Value))
    Else
    GUICtrlCreateListViewItem($IP & $Split[4]&"| Online",$List)
    $Value += 0.4
    GUICtrlSetData($Label, $Value & "%")
    GUICtrlSetData($Fortschritt,Int($Value))
    EndIf
    Next

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

    While Sleep(100)
    WEnd

    [/autoit]
  • ja das pingen, kann man die menge der pakete kleiner machen??? wenn ja wie
    oder die bytezahl der pakete veringern, dann ging es schneller

    hat zwar jetzt schon gut speed weil es nur die ips nimmt, abber is immer noch zu langsam

    Edit: bzw kann man mehrere pings auf einmal ausführen???

  • Noch ne frage wie kann ichs wenn ichs über cmd mache auslesen ob der ping erfolg hatte oder nicht???

  • Mach dir ein kleiner programm dass den ping enthält und starte es von deinem Haupt programm aus, für jede ip ein mal starten, nach dem Pingen das ergebnis in ne ini schreiben und mit dem Hauptprog auslesen und anzeigen. Damit kannst du gleich alle pings parallel durchführen, allerdings is der prozzie auf 100%. Wenn du willst schick ich dir ein Beispielscript

    Computers are like Airconditioning. They don´t work with open Windows.

  • hm netview klingt ja ganz gut nur hab ich keine ahnung von dem script was er gebastelt hat ich wollte eigentlich nur einen schnelleren pin aber na ja

    danke für die antworten

  • Hier mal mein ip scanner, vllt hilfsts dir ja:

    Spoiler anzeigen
    [autoit]

    #include <inet.au3>
    #include <array.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    GUICreate("Network Scanner", 200, 130)
    GUICtrlCreateLabel("IP-Bereich:", 10, 10, 100, 30)
    $1 = GUICtrlCreateInput("192", 105, 10, 30, 30)
    $2 = GUICtrlCreateInput("168", 140, 10, 30, 30)
    $3 = GUICtrlCreateInput("0", 175, 10, 30, 30)
    $scan = GUICtrlCreateButton("Scannen", 50, 50, 100, 40)
    $progress = GUICtrlCreateProgress(10, 100, 180, 20)
    $dll = DllOpen("ws2_32.dll")
    GUISetState()
    Dim $array[257][2]
    $array[0][0] = "IP"
    $array[0][1] = "Name"
    $i = 0
    TCPStartup()
    FileDelete(@ScriptDir & "ping.ini")
    While 1 * Sleep(10)
    $msg = GUIGetMsg()
    Switch $msg
    Case $scan
    _scan()
    _show()
    Case - 3
    Exit
    EndSwitch
    WEnd
    #cs
    Func _ScanIPRange($sIP_Range, $iWaitms = 100)
    If Not StringRegExp($sIP_Range, '\d{1,3}\.\d{1,3}\.\d{1,3}\.') Then Return SetError(1, 0, 0)
    Local $sPID, $sOut, $aOut[1][2], $sTmp
    For $i = 1 To 255
    $sOut = ''
    ToolTip('Scanne IP: ' & $sIP_Range & $i)
    $sPID = Run(@ComSpec & ' /c ping -a -w ' & $iWaitms & ' -4 -n 1 ' & $sIP_Range & $i, @SystemDir, @SW_HIDE, $STDOUT_CHILD)
    Do
    Sleep(10)
    $sOut &= StdoutRead($sPID)
    Until @error <> 0
    If Not StringInStr($sOut, '100% Verlust') Then
    $aOut[UBound($aOut) - 1][0] = $sIP_Range & $i
    $sTmp = StringRegExpReplace($sOut, '(?s).+Ping (\H+?) .+', '$1')
    If $sTmp = 'wird' Then $sTmp = 'Hostname nicht gefunden'
    $aOut[UBound($aOut) - 1][1] = $sTmp
    ReDim $aOut[UBound($aOut) + 1][2]
    EndIf
    Next
    ReDim $aOut[UBound($aOut) - 1][2]
    ToolTip('')
    Return $aOut
    EndFunc ;==>_ScanIPRange
    #ce
    Func _scan()
    For $i = 0 To 255
    $ip = GUICtrlRead($1) & "." & GUICtrlRead($2) & "." & GUICtrlRead($3) & "." & $i
    Run("ping.exe " & $ip)
    ConsoleWrite($ip & @CRLF)
    Next
    GUICtrlSetData($progress, 50)
    Do
    Sleep(100)
    Until Not ProcessExists("ping.exe")
    $pings = IniReadSection("ping.ini", "pings")
    For $i = 1 To UBound($pings) - 1
    $subIP = StringReplace($pings[$i][0], GUICtrlRead($1) & "." & GUICtrlRead($2) & "." & GUICtrlRead($3) & ".", "")
    ConsoleWrite($subIP & @CRLF)
    $array[$subIP + 1][0] = $pings[$i][0]
    If Number($pings[$i][1]) <> 0 Then
    $array[$subIP + 1][1] = _TCPIpToName($pings[$i][0], 0, $dll)
    If $array[$subIP + 1][1] = "" Then
    $array[$subIP + 1][1] = "Unnamed Host"
    EndIf
    Else
    $array[$subIP + 1][1] = "Error: (" & $pings[$i][1] & ")"
    EndIf
    GUICtrlSetData($progress, 50 + (100 / 255 * $i) / 2)
    Next
    FileDelete(@ScriptDir & "ping.ini")
    EndFunc ;==>_scan
    Func _show()
    _ArrayDisplay($array, "IP´s / Names")
    EndFunc ;==>_show
    DllClose($dll)

    [/autoit]

    und hier die datei zum pingen:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    ;Diese Datei muss als "Ping.exe" compiliert werden
    If $cmdline[0] = 1 Then
    $ping = Ping($cmdline[1])
    If @error Then
    Switch @error
    Case 1
    IniWrite("ping.ini","pings",$cmdline[1],"Host is offline")
    Case 2
    IniWrite("ping.ini","pings",$cmdline[1],"Host is unreachable")
    Case 3
    IniWrite("ping.ini","pings",$cmdline[1],"Bad destination")
    Case 4
    IniWrite("ping.ini","pings",$cmdline[1],"Other errors")
    EndSwitch
    Else
    IniWrite("ping.ini","pings",$cmdline[1],$ping)
    EndIf
    EndIf

    [/autoit]


    (muss als exe compiliert werden)

    Mfg

    Computers are like Airconditioning. They don´t work with open Windows.

  • Kannst Dir auch gerne meinen IP-Scanner in meiner Sig ansehen.
    PS: aktuell ist Ping ziemlich beschränkt, da sich der Timeout von 1 Sekunde nicht verringern läßt.
    D.h. wenn ein Rechner nicht erreichbar ist, dann wartet Ping nunmal 1 Sekunde.

    Abhilfe schafft da das kleine Tool fping
    Das kannst du in Dein Script einbinden. Das kann 1 msec pro Ping ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • du solltest die cmd fenster unsichtbar aufrufen, und die zeitüberschreitung runtersetzen

    du könntest auch eine gui erstellen und so vie ich eine listview machen sieht schöner aus

    edit: hm ich hasse es scripte zu kopieren, ich glaub ich bleib bei meinem lahmen, aber mit ping kann man doch auch 10ms eingeben

    Ping(xxx.xxx.xxx.xxx,20)
    ping mit 20 sec zeitüberschreitung

  • Na ja, das script is relativ alt, und hab ich nie überarbeitet, habs nur gerade wieder ausgegraben, deswegen auch kein listview und tuningmaßnahmen nicht voll ausgeschöpft...

    Du musst ja nicht kopieren, ich wollte dir das nur als anstoß geben wie mans machen könnte, wie du gesehen hast nsteckt da noch einiges an tuningpotetial drinnen, mit komplett neu schreiben und überdenken vllt sogar noch viel mehr

    mfg

    Computers are like Airconditioning. They don´t work with open Windows.