alle computer im netz auflisten

  • da ich gerade ein netzwerk tool bastle würde ich gerne alle computer im netzwerk mit ip und computername (evtl. noch zusätzliche infos wie ping etc.) in ein listview eintragen.
    alle verfügbaren ips im netz auflisten ist kein problem aber der rest...

    kann mir jemand helfen???

  • ja danke das is klasse!! nur wenn ich diese funktion einbaue kommt ein fehler:

    ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

    keinen plan warum... hast jemand ne idee warum???

    • Offizieller Beitrag

    Hi,

    nimm doch das vorgebene Bsp:

    Spoiler anzeigen
    [autoit]

    ; ##############################################################################

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

    #include <GUIConstants.au3>
    #include <array.au3>

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

    $Form1 = GUICreate("AForm1", 275, 161, 213, 191)
    $Progress1 = GUICtrlCreateProgress(8, 136, 262, 17)
    GUICtrlSetColor(-1, 0xC5E7F6)
    $ListView1 = GUICtrlCreateListView("IP|Mac|Name", 8, 8, 258, 126)
    GUISetState(@SW_SHOW)
    $pa = _PingAll(1, 13, "", "", "", "", "", 0, 0, 0, 1, 1, 10, "|", "1", "0", $Progress1, 0)
    For $i = 1 To $pa[0]
    GUICtrlCreateListViewItem($pa[$i], $ListView1)
    Next

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case Else

    EndSelect
    WEnd
    Exit
    $ipstart = "192.168.178.1"
    $ipend = "192.168.178.30"

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

    ; ##############################################################################
    ; ##############################################################################
    ; ##############################################################################

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

    ; ##############################################################################
    ; ### PING ALL #################################################################
    ; ##############################################################################

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

    Func _PingAll($ipstart, $ipend, $iprange = "", $port01 = "", $port02 = "", $port03 = "", $port04 = "", $radim = 0, $winxp = 1, $vnc = 1, $ShowName = 1, $ShowMac = 1, $dealy = 100, $slash = "|", $yes = 1, $no = 0, $showprog = 1, $showbevore = 1)

    If $iprange = "" Then
    $iprange = StringSplit(@IPAddress1, ".")
    $iprange = $iprange[1] & "." & $iprange[2] & "." & $iprange[3] & "."
    EndIf
    Local $ipadress[$ipend + 1] = [1, ""]
    $ip = $ipstart
    If $showprog = 1 Then ProgressOn("IP", "IP Check")

    Global $ra, $xp, $VNC3, $MAC1, $name1
    If $showbevore = 1 Then
    $ra = "Ra:"
    $xp = "XP:"
    $VNC3 = "VNC:"
    $MAC1 = "Mac:"
    $name1 = "Name:"
    EndIf

    $i = 0
    Do
    If $showprog = 1 Then ProgressSet(($ip * 100) / $ipend, $iprange & $ip)
    $ip += 1
    Ping($iprange & $ip, $dealy)
    If Not @error Then
    $i += 1
    $ipadress[$i] &= $iprange & $ip & $slash
    If $port01 <> "" Then $ipadress[$i] &= $port01 & ":" & PortScan($port01, $iprange & $ip, $yes, $no) & $slash
    If $port02 <> "" Then $ipadress[$i] &= $port02 & ":" & PortScan($port02, $iprange & $ip, $yes, $no) & $slash
    If $port03 <> "" Then $ipadress[$i] &= $port03 & ":" & PortScan($port03, $iprange & $ip, $yes, $no) & $slash
    If $port04 <> "" Then $ipadress[$i] &= $port04 & ":" & PortScan($port04, $iprange & $ip, $yes, $no) & $slash
    If $radim <> 0 Then $ipadress[$i] &= $ra & PortScan(4899, $iprange & $ip, $yes, $no) & $slash
    If $winxp <> 0 Then $ipadress[$i] &= $xp & PortScan(3389, $iprange & $ip, $yes, $no) & $slash
    If $vnc <> 0 Then $ipadress[$i] &= $VNC3 & PortScan(5900, $iprange & $ip, $yes, $no) & $slash
    If $ShowMac <> 0 Then $ipadress[$i] &= $MAC1 & _GetMACFromIP($iprange & $ip) & $slash
    If $ShowName <> 0 Then $ipadress[$i] &= $name1 & _IpToName($iprange & $ip) & $slash
    EndIf
    $ipadress[$ip] = StringTrimRight($ipadress[$ip], 1)
    ;~ MsgBox(0,$ipstart&" "&$ipend,$iprange&$ip)
    If $showprog = 1 Then ProgressSet(($ip * 100) / $ipend)
    If $showprog <> 0 And $showprog <> 1 Then GUICtrlSetData($showprog, ($ip * 100) / $ipend)
    Until $ip >= $ipend
    $ipadress[0] = $i
    ProgressOff()
    _ArrayDisplay($ipadress, "")
    Return $ipadress
    EndFunc ;==>_PingAll

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

    Func PortScan($port, $ip, $1, $2)
    $socket = TCPConnect($ip, $port)
    If $socket = -1 Then
    Return $2
    Else
    Return $1
    EndIf
    EndFunc ;==>PortScan

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

    Func _GetMACFromIP($sIP)
    Local $MAC, $MACSize
    Local $i, $s, $r, $iIP
    $MAC = DllStructCreate("byte[6]")
    $MACSize = DllStructCreate("int")
    DllStructSetData($MACSize, 1, 6)
    $r = DllCall("Ws2_32.dll", "int", "inet_addr", "str", $sIP)
    $iIP = $r[0]
    $r = DllCall("iphlpapi.dll", "int", "SendARP", "int", $iIP, "int", 0, "ptr", DllStructGetPtr($MAC), "ptr", DllStructGetPtr($MACSize))
    $s = ""
    For $i = 0 To 5
    If $i Then $s = $s & ":"
    $s = $s & Hex(DllStructGetData($MAC, 1, $i + 1), 2)
    Next
    Return $s
    EndFunc ;==>_GetMACFromIP

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

    Func _IpToName($ip)
    $outread = "ERROR: Kann Programm NbtStat.exe nicht finden!"
    Ping($ip, 50)
    If @error Then
    ;~ MsgBox(16,"Ping error","Die adresse "&$ip&" konnte nich gefunden werden, stellen Sie sicher das der Rechner online ist!")
    ;~ Exit
    Return @error
    EndIf
    $run = Run(@ComSpec & " /c nbtstat -a " & $ip, @SystemDir, @SW_HIDE, 6)
    Sleep(500)
    $stdoutread = StdoutRead($run)
    If Not @error = -1 Then $outread = $stdoutread

    $stderrRead = StderrRead($run)
    If Not @error = -1 Then $outread = $stderrRead
    $ss = StringSplit($outread, @CRLF)
    If $ss[0] < 23 Then
    $outread = "(Kein Name Vorhanden)"
    Else
    $outread = $ss[23]
    $outread = StringReplace($outread, Chr(129), "ü")
    $outread = StringReplace($outread, Chr(154), "Ü")
    $outread = StringReplace($outread, Chr(142), "Ä")
    $outread = StringReplace($outread, Chr(132), "ä")
    $outread = StringReplace($outread, Chr(153), "Ö")
    $outread = StringReplace($outread, Chr(148), "ö")
    $outreadlen = StringLen(" LAN-Verbindung:Knoten-IP-Adresse: [] Bereichskennung: [] NetBIOS-Namentabelle des Remotecomputers Name Typ Status --------------------------------------------- ") + StringLen($ip)
    $outread = StringTrimLeft($outread, 4)
    $outread = StringSplit($outread, " ")
    $outread = $outread[1]
    $outread = StringReplace($outread, " ", "", 0)
    EndIf
    Return $outread
    EndFunc ;==>_IpToName

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

    ; ##############################################################################
    ; ##############################################################################
    ; ##############################################################################

    [/autoit]

    So long,

    Mega

  • hast du das ma getestet?? bei mir geht das ni!!!! ????

    :: der trägt nix in den listview ein und in dem array steht auch nix (einzelne zeilen haben keinen wert)

    :hammer:

    EDIT:
    das array hat IMMER nur 13 zeilen !?!?!?!

    Einmal editiert, zuletzt von mR. sEx p!sT0Ls (10. November 2006 um 18:53)

    • Offizieller Beitrag

    Hi,

    wenn du nicht im Netzwerk bist, dann kann er nur deinen Rechner finden. Du mußt gucken welche IP du hast und die Funktion dementprechend anpassen. Bei mir funkionert es!

    Edit: Um es noch besser zu erklären, ich habe 1,13 gewählt. Meine IP endet auf 11 deshalb findet er was.

    So long,

    Mega

  • Guten Abend Leute...

    Großes Kompliment an th.meger...ist ein echt geniales Skript.

    Aber ich würde ja nicht einfach hier sowas rein posten wenn ich kein Problem hätte.

    Es ist so, dass bei mir zwar eine Mac und eine IP gezeigt wird aber es fehlt der PC Name. Was kann ich da machen?

    Bin für jede Hilfe dankbar


    mfG
    Carsten

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

    Einmal editiert, zuletzt von Waluev (10. November 2006 um 20:54)

  • wenn wir schon mal dabei sind... wo kann ich denn in meinem programm meine ip ändern?? bzw. wo speichert windows denn die ip???

  • oh...sry wollte hier keinen um sein Lob bringen... :schild4:

    @ GtaSpider: fein gemacht ;)

    naja ich hoffe trotzdem noch auf ne Antwort auf meine Frage...

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • in dem Posting von th.meger ist auch eine Funktion _IpToName($ip) enthalten. Diese setzt auf nbtstat auf. Du kannst auch die Consolenausgabe von "ipconfig /all" oder "ping -a ipadresse" auswerten.

    • Offizieller Beitrag

    Hallo!

    Genau! Sorry das ich erst so spät mit rein komm, aber ich hab mom sehr viel mit schule usw zu tun..
    Naja egal @thema: _IpToName funktioniert bei dir nicht? Mhhh... Also ich habe die funktion auf mehereren rechnern getestet, und sie funktionierte perfekt. Was für ein os hast du? Achso und danke für das lob Waluev xD

    @Sexpistol: ich öffne gleich mal unter Skripts ein Neues Thema mit einer für dich wohl interesanten Funktion (_SetIP hab ich sie gennannt =) )

    Mfg Spider

  • naja ich benutze Windows XP Professionel.

    Habs jetzt sogar mal probiert wenn andere Computer im Netzwerk laufen und auch bei denen steht kein Name da. :weinen:

    Was ist das denn nur?

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • GtaSpider : vielen dank!!! und großes lob natürlich auch von mir - ich hab deine _PingAll funktion gleich in mein script eingebaut und schau mir jetz ma die _SetIP func an...