Netzwerk - MAC Adresse auslesen/überschreiben



  • Hi,

    weiß einer von Euch wie man auf einfache Art und Weise mit dem BCB die MAC Adresse der Netzwerkkarte auslesen und im System überschreiben kann ?

    [ 17.08.2001: Beitrag editiert von: Jansen ]



  • Wie man die Mac-Adresse einer Netzwerkkarte ausliest, steht im MSDN von Microsoft beschrieben, vorausgesetzt, die Karte ist an Netbios gebunden. Da es mich selber interessiert hat, habe ich den Code etwas modifiziert und an BCB angepasst.

    include <nb30.h>
    bool __fastcall TForm1::ReadMacAddr(AnsiString &MacAddr)
    {
        NCB ncb;
        UCHAR RetCode;
        char NetName[50];
        struct    {    ADAPTER_STATUS adapt;
                    NAME_BUFFER NameBuff [30];
                } Adapter;
    
        // Adapter Reset
        memset(&ncb, 0, sizeof(ncb));
        ncb.ncb_command=NCBRESET;
        ncb.ncb_lana_num=0;
        if((RetCode=Netbios(&ncb))!=0)
        {    MacAddr.sprintf("Fehler %d beim Reset des Adapters", RetCode);
            return(false);
        }
    
        // Adapter Status
        memset(&ncb, 0, sizeof(ncb));
        ncb.ncb_command=NCBASTAT;
        ncb.ncb_lana_num=0;
    
        memset(ncb.ncb_callname, ' ', NCBNAMSZ);
        *(ncb.ncb_callname)='*';
        ncb.ncb_buffer=(char*)&Adapter;
        ncb.ncb_length=sizeof(Adapter);
    
        if((RetCode=Netbios(&ncb))==0)
        {   MacAddr.sprintf("%02X-%02X-%02X-%02X-%02X-%02X",
                    Adapter.adapt.adapter_address[0],
                    Adapter.adapt.adapter_address[1],
                    Adapter.adapt.adapter_address[2],
                    Adapter.adapt.adapter_address[3],
                    Adapter.adapt.adapter_address[4],
                    Adapter.adapt.adapter_address[5] );
            return(true);
        }
        else
        {    MacAddr.sprintf("Fehler %d beim Bestimmen der MacAdrese", RetCode);
            return(false);
        }
    }
    

    Es gibt noch ne andere Möglichkeit, nämlich über die API-Funktion UUIDCreate, aber laut SDK Hilfe funktioniert das nur unter WINNT. Deshalb hab ich das nicht explizit ausprobiert.
    Wie man die MAC überschreibt, konnte ich so auf die Schnelle nicht finden.

    [ 09.07.2001: Beitrag editiert von: Happy Builder ]



  • Hallo Peter,

    super, vielen Dank !!!



  • Habe mittlerweile rausgefunden wo man die MAC Adresse überschreiben kann. Wenn man den Treiber der Netzwerkkarte kennt (bei mir E1... von Intel) muß man unter

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\E100B1\Parameters

    einen Texteintrag NetworkAddress mit der gewünschten MAC Adresse (ohne - und : ) hinzufügen. Nach dem nächsten Reboot meldet sich die Karte mit der geänderten Adresse.

    Für den Fall das ihr mal die MAC Adresse ändern wollt [http://www.c-plusplus.net/ubb/ubb/wink.gif](http://<a href=)">http://www.c-plusplus.net/ubb/ubb/wink.gif

    [ Dieser Beitrag wurde am 11.08.2002 um 11:18 Uhr von WoWe editiert. ]



  • Super, danke für die Info http://www.c-plusplus.net/ubb/ubb/smile.gif

    ------------------
    Gruß Peter

    Wenn Dein Programm auf Anhieb läuft, hast Du irgendwas falsch gemacht 😉
    Ausserdem, ein Blick in die Online-Doku und ein wenig Kreativität wirken manchmal Wunder.


Anmelden zum Antworten