Rechner im Netzwerk auflisten



  • Hi,

    ich möchte mir in einer Listbox alle gerade im Netzwerk verfügbaren Rechner auflisten lassen. Es ist davon auszugehen, dass es nur eine Domain gibt. Wie kann man so etwas am elegantesten realisieren?



  • ich würde ein ping 192.168.0.0 senden und sämtliche IP-Adressen abfangen...

    cya
    DjR



  • Und was ist, wenn die Rechner in der jeweiligen Domäne z.B. mit 154.20. beginnen? Mit welchen API-Funktionen arbeitet man da überhaupt?



  • PING gibt es in der WinAPI schonmal nicht 😞



  • Dafür gibts irgendeine Netbios-Broadcast-Message (mehr weiss ich darüber nich...)

    Alternativ könnte man auch einfach durchpingen (Subnetmask und aktuelle IP kann man aus der Registry lesen - dummerweise gibts mal wieder unter Win9x und Win2k/XP/NT andere Pfade 😉



  • ALLE Netz Teilnehmer bestimmen

    netapi32.lib Einbinden !!!!!!

    #ifndef UNICODE
    #define UNICODE
    #endif

    #include <stdio.h>
    #include <assert.h>
    #include <windows.h>
    #include <lm.h>

    int wmain(int argc, wchar_t *argv[])
    {
    LPSERVER_INFO_101 pBuf = NULL;
    LPSERVER_INFO_101 pTmpBuf;
    DWORD dwLevel = 101;
    DWORD dwPrefMaxLen = -1;
    DWORD dwEntriesRead = 0;
    DWORD dwTotalEntries = 0;
    DWORD dwTotalCount = 0;
    DWORD dwServerType = SV_TYPE_SERVER; // all servers
    DWORD dwResumeHandle = 0;
    NET_API_STATUS nStatus;
    LPTSTR pszServerName = NULL;
    DWORD i;

    if (argc > 2)
    {
    fwprintf(stderr, L"Usage: %s [\\\ServerName]\n", argv[0]);
    exit(1);
    }
    // The server is not the default local computer.
    //
    if (argc == 2)
    pszServerName = argv[1];
    //
    // Call the NetServerEnum function to retrieve information
    // for all servers, specifying information level 101.
    //
    nStatus = NetServerEnum(pszServerName,
    dwLevel,
    (LPBYTE 😉 &pBuf,
    dwPrefMaxLen,
    &dwEntriesRead,
    &dwTotalEntries,
    dwServerType,
    NULL,
    &dwResumeHandle);
    //
    // If the call succeeds,
    //
    if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
    {
    if ((pTmpBuf = pBuf) != NULL)
    {
    //
    // Loop through the entries and
    // print the data for all server types.
    //
    for (i = 0; i < dwEntriesRead; i++)
    {
    assert(pTmpBuf != NULL);

    if (pTmpBuf == NULL)
    {
    fprintf(stderr, "An access violation has occurred\n");
    break;
    }

    printf("\tPlatform: %d\n", pTmpBuf->sv101_platform_id);
    wprintf(L"\tName: %s\n", pTmpBuf->sv101_name);
    printf("\tVersion: %d.%d\n",
    pTmpBuf->sv101_version_major,
    pTmpBuf->sv101_version_minor);
    printf("\tType: %d", pTmpBuf->sv101_type);
    //
    // Check to see if the server is a domain controller;
    // if so, identify it as a PDC or a BDC.
    //
    if (pTmpBuf->sv101_type & SV_TYPE_DOMAIN_CTRL)
    wprintf(L" (PDC)");
    else if (pTmpBuf->sv101_type & SV_TYPE_DOMAIN_BAKCTRL)
    wprintf(L" (BDC)");

    printf("\n");
    //
    // Also print the comment associated with the server.
    //
    wprintf(L"\tComment: %s\n\n", pTmpBuf->sv101_comment);

    pTmpBuf++;
    dwTotalCount++;
    }
    // Display a warning if all available entries were
    // not enumerated, print the number actually
    // enumerated, and the total number available.

    if (nStatus == ERROR_MORE_DATA)
    {
    fprintf(stderr, "\nMore entries available!!!\n");
    fprintf(stderr, "Total entries: %d", dwTotalEntries);
    }

    printf("\nEntries enumerated: %d\n", dwTotalCount);
    }
    }

    //
    // Free the allocated buffer.
    //
    if (pBuf != NULL)
    NetApiBufferFree(pBuf);

    return 0;
    }

    (funktioniert nur bei WIN 2000,NT,XP)



  • Der Code gibt beim complilieren keinen Fehler. Jedoch wird auch nichts angezeigt!

    Wenn ich z.B. unter FormCreate

    ShowMessage(dwTotalCount);

    eintippe

    damm bekomme ich den Fehler dass 'dwTotalCount' undefiniert ist.

    Wie deppert bin ich, dass ich das nicht hinbekomme.
    Den Code der da drüber steht habe ich direkt nach
    TForm1 *Form1;
    eingefügt

    Hoffe auf Antwort

    netapi32.lib Einbinden !!!!!!
    

    Ähmm, Wo?

    Danke



  • äähm, ist nich eher für Console gedacht?
    also ich hab n neues projekt angelegt. den code eingefügt.
    settings => linker => netapi32.lib eingefügt, compiliert, gelinkt und tataaaa => es hat gefunzt.

    cu para
    😃

    [ Dieser Beitrag wurde am 20.11.2002 um 20:07 Uhr von paranoiac.org editiert. ]



  • Ähmm, nur dass ich nochmal kutz sicher gehe.

    Hast du das mit dem BCB (Borland C++ Builder) gemacht?

    Und es wurde auch tatsächlich die connecteten User angezeigt (sei es auch nur einer)



  • Kann mir denn keiner verraten wie ich die angezeigt bekomme.

    Es gibt ja keine Fehler beim kompilieren, weiß aber nicht was ich nun machen soll. Please HELP me 😞



  • Du musst statt eines "normalen" BCB-Programmes eine Konsolenanwendung erstellen und den Code dort einfügen. Vor das return 0; setzt du am besten noch ein getchar, um das automatische Schliessen des Konsolenfensters zu verhindern.



  • Oder du siehst dir den entsprechenden Beitrag im BCB-Forum an. 🙂



  • Ich danke dir wiedermal sehr Jansen.

    Mir wurde nun schon so oft in diesem Forum geholfen, ich werde mich in Form der User-Registrierung bedanken.

    Vielen Danke, dass es sein so tolles Board auf der Welt gibt.



  • HI, bin ja echt froh mal sowas gefunden zu haben, füge es in konsolenanwendung ein, in borland 6, brauche die lib also nich mehr einbinden, aber leider kommt fehlermeldung, was mich trauig macht 😃 , da es bei jemand anderen schon gklappt hat.

    Fehlermeldung:

    [C++ Fehler] Unit1.cpp(49): E2034 Konvertierung von 'char *' nach 'const wchar_t *' nicht möglich
    [C++ Fehler] Unit1.cpp(49): E2342 Keine Übereinstimmung des Typs beim Parameter 'servername' ('const wchar_t *' erwartet, 'char *' erhalten)
    [C++ Warnung] Unit1.cpp(116): W8004 'pszServerName' wurde ein Wert zugewiesen, der nie verwendet wird

    kann mir jemand helfen Bitte ich könnte das dringend gebrauchen



  • poste doch mal deinen code


Anmelden zum Antworten