MAC-Adresse



  • Hallo zusammen,

    ich habe folgendes Problem... Ich lese mit dem untenstehenden Code die MAC-Adresse eines Netzwerkadapters aus... Leider gibt die Funktion immer 00-00-00-00-00-00 zurück...

    #include <vcl.h>
    #include "winsock2.h"
    #include "windows.h"
    #include "nb30.h"
    #include "net_get_macadresses.h"
    
    typedef struct _ASTAT
    {
      ADAPTER_STATUS  adapt;
      NAME_BUFFER  NameBuff[30];
    } ASTAT;
    
    int GetMacAddresses(TStrings* pslStrings)
    {
      int ilRetVal = 0;       // Rückgabewert
      NCB stNetCtrlBlock;     // Network Control Block - Instanz
      LPVOID pASTAT;          // Zeiger auf die ASTAT-Struktur
      ASTAT stAdapterStatus;  // AdapterStatus-Struktur
      LANA_ENUM stLanEnum;    // Struktur für die Enumerierung der
                              // Netzwerkkarten
    
      if(pslStrings != NULL) pslStrings->Clear();
    
      // die Anzahl der Netzwerkkarten ermitteln:
      memset(&stNetCtrlBlock, 0, sizeof(stNetCtrlBlock));
      stNetCtrlBlock.ncb_command = NCBENUM;
      stNetCtrlBlock.ncb_buffer = (UCHAR *)&stLanEnum;
      stNetCtrlBlock.ncb_length = sizeof(stLanEnum);
      Netbios(&stNetCtrlBlock);
      ilRetVal = stLanEnum.length;
    
      // Falls Zeiger auf TStrings-Instanz übergeben, MAC-Adressen
      // auslesen und in die Stringliste einfügen:
      if(pslStrings != NULL)
      {
        for(int ilAdapter=0; ilAdapter < ilRetVal; ilAdapter++)
        {
          stNetCtrlBlock.ncb_command = NCBRESET;
          Netbios(&stNetCtrlBlock);
          strcpy(stNetCtrlBlock.ncb_callname,"*               ");
          stNetCtrlBlock.ncb_command = NCBASTAT;
          stNetCtrlBlock.ncb_lana_num = ilAdapter;
          stNetCtrlBlock.ncb_length = sizeof(stAdapterStatus);
    
          pASTAT=HeapAlloc(GetProcessHeap(),HEAP_GENERATE_EXCEPTIONS|
            HEAP_ZERO_MEMORY, stNetCtrlBlock.ncb_length);
    
          if(pASTAT != NULL)
          {
            stNetCtrlBlock.ncb_buffer=(UCHAR *)pASTAT;
            Netbios(&stNetCtrlBlock);
            CopyMemory(&stAdapterStatus,stNetCtrlBlock.ncb_buffer,
              sizeof(stAdapterStatus));
            AnsiString slMacAddress;
    
            slMacAddress += IntToStr(stAdapterStatus.adapt.adapter_address);
    
            for(int i =0; i < 6; i++)
            {
              slMacAddress += IntToHex(stAdapterStatus.adapt.adapter_address[i],2);
              if(i<5) slMacAddress+="-";
            }
            HeapFree(GetProcessHeap(),0,pASTAT);
            pslStrings->Add(slMacAddress);
          }
          else ilRetVal = 0;
        }
      }
      return ilRetVal;
    }
    


  • Hallo HandyMann

    Eine Frage zu Objektorientierten Netzwerkprogrammierung C++

    Kannst du mir bitte sagen was du an Literatur finden konntest darüber.

    HAst du vielleicht ein gutes Buch eine gute Seite für Anfänger ?

    Woher hast du deine Quellen darüber ?

    Freue mich schon auf eine Antwort und hoffe das du was brauchbares hast für mich.

    Bitte nichts über Linux oder etwas anderes als Microsoftnetzwerke.

    Danke



  • hi,
    wo soll bei dir die adresse stehen. doch nicht im rueckgabewert!?

    gruss
    msp



  • Hast Du zufällig das Mainboard ECS (Elitegroup) K7S5A ??
    Das hab' ich nämlich auch, und der OnBoard-NIC vergißt seine MAC-Adresse schonmal... gestern erst wieder passiert...
    Aber ist mir mittlerweile scheißegal, kein' Bock die immer mal wieder zu resetten...

    Ein "ipconfig /all" gibt z.Z. folgendes aus:

    Ethernetadapter LAN-Verbindung:

    Verbindungsspezifisches DNS-Suffix:
    Beschreibung. . . . . . . . . . . : SiS 900-basierte PCI-Fast Ethernet-Adapter
    Physikalische Adresse . . . . . . : 00-00-00-00-00-00
    DHCP aktiviert. . . . . . . . . . : Nein
    IP-Adresse. . . . . . . [...]

    😃 🤡 Trotzdem vermute ich ja mal, daß es ein SW-Prob ist... 🤡 😃



  • Hallo zusammen,

    @msp: Nein... Der Rückgabewert sagt mir lediglich wie viele NIC in dem Rechner drinnen sind... Die Werte werden an die TString-Instanz gegeben...

    @Sgt. Nukem: Cool 😃 Aber ein solches Board ist leider nicht dabei...

    @nospe: Ich kann http://www.bytesandmore.de und http://www.schlotsoft.de empfehlen...

    CU
    Handyman



  • handyman == The Godfather!?

    Die Nachfrage im BCB-Forum hast du ja ignoriert, deshalb hier nochmal: welches Ergebnis liefert die Variante aus der BCB-FAQ?



  • handyman != The Godfather

    Das untere funktioniert...

    THX
    Handyman


Anmelden zum Antworten