Tool zum auslesen vom angemeldeten Rechnern im Netzwerk

  • Hallo zusammen,

    würde gerne ein Tool zum auflisten der Rechner im Netzwerk bastel. Nur ich weiß gerade nicht wie und benötige dazu einen Denkanstoß.
    Welche Teile der Hilfe bzw Functionen dafür nötig sind.

    Gruß Icerose

    Einmal editiert, zuletzt von icerose (28. Oktober 2008 um 11:14)

  • also ich würde das im Windows Netz mit dem Dos Befehl: net view
    machen. Und das Ergbnis in Autoit überarbeiten.

    Franz

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • z.B. so

    [autoit]


    MsgBox(64, "", _getDOSOutput("net view"))

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

    Func _getDOSOutput($command)
    Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
    While 1
    $text &= StdoutRead($Pid, False, False) & @CR
    If @error Then ExitLoop
    Sleep(10)
    WEnd
    ;~ Return StringReplace(StringReplace(StringStripWS($text, 7), @CR, @CRLF), @LF, @CRLF)
    Return StringStripWS($text, 3)
    EndFunc ;==>_getDOSOutput

    [/autoit]

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • je nach dem was du für Rechner "sehen" willst - vielleicht nen kleinen Massping durch Netz / Subnetz schicken und gucken wer Antwortet - damit kannste dann weiterarbieten...

    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

  • so z.B.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $array = StringSplit(_getDOSOutput("net view"), @CR)
    _ArrayDisplay($array)

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

    Func _getDOSOutput($command)
    Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
    While 1
    $text &= StdoutRead($Pid, False, False) & @CR
    If @error Then ExitLoop
    Sleep(10)
    WEnd
    ;~ Return StringReplace(StringReplace(StringStripWS($text, 7), @CR, @CRLF), @LF, @CRLF)
    Return StringStripWS($text, 3)
    EndFunc ;==>_getDOSOutput

    [/autoit]

    Du musst nur noch die ungewollten Zeilen rausfiltern.

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

    • Offizieller Beitrag

    Hi,

    dies geht etwas schneller:

    [autoit]

    #include <Array.au3>

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

    Global Const $SV_TYPE_WORKSTATION = 0x1
    Global Const $SV_TYPE_SERVER = 0x2
    Global Const $SV_TYPE_SQLSERVER = 0x4
    Global Const $SV_TYPE_DOMAIN_CTRL = 0x8
    Global Const $SV_TYPE_DOMAIN_BAKCTRL = 0x10
    Global Const $SV_TYPE_TIME_SOURCE = 0x20
    Global Const $SV_TYPE_AFP = 0x40
    Global Const $SV_TYPE_NOVELL = 0x80
    Global Const $SV_TYPE_DOMAIN_MEMBER = 0x100
    Global Const $SV_TYPE_PRINTQ_SERVER = 0x200
    Global Const $SV_TYPE_DIALIN_SERVER = 0x400
    Global Const $SV_TYPE_XENIX_SERVER = 0x800
    Global Const $SV_TYPE_NT = 0x1000
    Global Const $SV_TYPE_WFW = 0x2000
    Global Const $SV_TYPE_SERVER_MFPN = 0x4000
    Global Const $SV_TYPE_SERVER_NT = 0x8000
    Global Const $SV_TYPE_POTENTIAL_BROWSER = 0x10000
    Global Const $SV_TYPE_BACKUP_BROWSER = 0x20000
    Global Const $SV_TYPE_MASTER_BROWSER = 0x40000
    Global Const $SV_TYPE_DOMAIN_MASTER = 0x80000
    Global Const $SV_TYPE_WINDOWS = 0x400000
    Global Const $SV_TYPE_CLUSTER_NT = 0x1000000
    Global Const $SV_TYPE_TERMINALSERVER = 0x2000000
    Global Const $SV_TYPE_CLUSTER_VS_NT = 0x4000000
    Global Const $SV_TYPE_LOCAL_LIST_ONLY = 0x40000000
    Global Const $SV_TYPE_DOMAIN_ENUM = 0x80000000
    Global Const $SV_TYPE_ALL = 0xFFFFFFFF

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

    $aCompList = _NetServerEnum($SV_TYPE_WORKSTATION)

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

    _ArrayDisplay($aCompList)

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

    Func _NetServerEnum ($iSrvType = -1, $sDomain = '')
    Local $uBufPtr = DllStructCreate("ptr;int;int"), $res[1]=[0], $i
    Local $uRecord = DllStructCreate("dword;ptr"), $iRecLen = DllStructGetSize($uRecord)
    Local $uString = DllStructCreate("char[16]")
    Local $uDomain = DllStructCreate("byte[32]"), $pDomain = 0
    If Not ($sDomain='' Or $sDomain='*') Then
    DllStructSetData($uDomain, 1, StringToBinary($sDomain,2))
    $pDomain = DllStructGetPtr($uDomain)
    EndIf
    Local $ret = DllCall ("netapi32.dll", "int", "NetServerEnum", _
    "ptr", 0, "int", 100, _
    "ptr", DllStructGetPtr($uBufPtr,1), "int", -1, _
    "ptr", DllStructGetPtr($uBufPtr,2), _
    "ptr", DllStructGetPtr($uBufPtr,3), _
    "int", $iSrvType, "ptr", $pDomain, "int", 0 )
    If $ret[0] Then Return SetError(1, $ret[0], '')
    Local $res[DllStructGetData($uBufPtr,3)+1]=[DllStructGetData($uBufPtr,3)]
    For $i=1 To DllStructGetData($uBufPtr,3)
    Local $uRecord = DllStructCreate("dword;ptr", DllStructGetData($uBufPtr,1)+($i-1)*$iRecLen)
    Local $sNBName = DllStructCreate("byte[32]", DllStructGetData($uRecord,2))
    DllStructSetData($uString,1,BinaryToString(DllStructGetData($sNBName,1),2))
    $res[$i] = DllStructGetData($uString,1)
    Next
    $ret = DllCall ("netapi32.dll", "int", "NetApiBufferFree", "ptr", DllStructGetData($uBufPtr,1))
    Return $res
    EndFunc

    [/autoit]

    Mega

  • das ist nich nur schneller :thumbup:
    hier kann man direkt nach eigenschaften der einzelnen Hosts filtern.. ziemlich praktisch !

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • Hi,

    dies geht etwas schneller:

    Mega

    Schöne Funktion. Wollte sie gerade nutzen, da musste ich einen Fehler / ein Problem feststellen:

    Ob "$SV_TYPE_WORKSTATION" oder "$SV_TYPE_SERVER" ergibt das gleiche Ergebnis. Ich hatte erwartet das bei ersterem die Workstation's und beim zweiten nur die Server zurückgegeben werden. War aber nicht der Fall. Bei den anderen Parametern schein das richtige Ergebnis herauszukommen.

    Kann es sein das sich dort noch ein Fehler eingeschlichen hat ?

    Gruß
    micha_he

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • ich glaube eher die SV_TYPE_Server stellt die Rechner dar die den Windows Service "server" gestartet haben. Dieser ist bei XP ab default an.

    Beschreibung Server Dienst:
    Unterstützt Datei-, Drucker- und Named-Piped-Freigabe für diesen Computer über das Netzwerk. Diese Funktionen sind nicht mehr verfügbar, falls dieser Dienst beendet wird. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.

    Was für einen Server suchst Du denn? Stehen doch genug andere Dienst zu Auswahl-

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • Ich hätte gerne ein Programm geschrieben, welches auf alle Arbeitsstationen (W2k & WXP) zugreift. Auf die Domänencontroller und die Dateiserver, soll es nicht zugreifen.
    Also hätte ich gerne, das die o.a. Funktion alle Systeme außer Windows NT-Server & Windows 2000/2003/2008 Server, zurückgibt.

    Leider tut sie das nicht. Aber Deine Aussage kann natürlich passen. Auf den W2k-Workstation-Systemen, läuft auch der Server-Dienst !

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • sry dass ich das alte thema wieder aufruf aber ich finde die funktion einfach genial

    was ich noch benötige wäre, dass ich auch die angemeldeten leute sehe z.B. hans.meier
    geht das?

  • heißt das, dass ich die funktion erst benutzen kann nachdem ich über tcp eine verbindung hergestellt hab?

    mein progrmam soll aber so ablaufen, dass ich eine liste mit hostnamen und angemeldeten benutzer habe die durch anklicken eine verbindung herstellt

    das hieße ich müsste bei der erstellung der liste zu jedem einzelnen eine verbindung herstellen um die funktion anzuwendne =S
    das wäre aber unpraktisch denn da könnte ich theoretisch gleich mit dem serverskript das auf der anderen seite hört den benutzernamen senden

    ich mein im windows netzwerk sind die namen ja bereits geladen