MAC-Adresse ermitteln



  • Hallo,

    mein Problem:
    Um die Mac-Adresse eines Servers herausfinden zu können, sende ich einen Broadcoast mit der IP des Servers ins Netz (ARP-Request). Als Antwort erhalte ich dann die Mac des Servers vom Server.

    Das Problem ist jetzt, dass ich meine eigenen Mac und IP Adressen für den ARP-Request kennen muss.

    meine Frage:
    wie kann ich mit c++ diese Adressen (Mac- und IP-Adresse) meiner Netzwerkkarte herausfinden?

    Infos
    - Ich benutze die SDK und die pcap.h
    - die Anwendung soll unter Wondows XP und W2k laufen

    Würde mich wirklich sehr sehr freuen wenn mir jemand helfen könnte, bin für jede Anregung oder Info dankbar

    vielen Dank im voraus
    Gruß Tupo13



  • HOWTO: Get the MAC Address for an Ethernet Adapter: http://support.microsoft.com/default.aspx%3Fscid%3Dkb%3Ben-us%3B118623
    oder
    WMI SDK with Win32_NetworkAdapter; http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_networkadapter.asp

    oder

    CString GetMACAddress(int adapternumber) 
    { 
     int nAdapterCount = 0; 
     ULONG ip; 
     ULONG buflen; 
     PIP_ADAPTER_INFO pAdInfo = NULL; 
     PIP_ADAPTER_INFO pAdInfo_c = NULL; 
    
     buflen = 0; 
     GetAdaptersInfo(pAdInfo, &buflen); //since buflen=0, buffer is 
        // too small. function returns required buffersize in buflen. 
     pAdInfo = (struct _IP_ADAPTER_INFO *)new UCHAR[buflen+1]; 
     pAdInfo_c = pAdInfo; 
     if (GetAdaptersInfo(pAdInfo, &buflen) == ERROR_SUCCESS) 
     { 
      do 
      { 
       ip = inet_addr(pAdInfo->IpAddressList.IpAddress.String); 
       if ((ip != 0)&&(ip != 0x7f000001)) 
       { 
        nAdapterCount++; 
        if ((nAdapterCount == adapternumber)||(adapternumber == 0)) 
        { 
         if (pAdInfo->AddressLength != 0) 
         { 
          CString macstr; 
          for (int i = 0; i < (int)pAdInfo->AddressLength; i++) 
          { 
           CString temp; 
           temp.Format(_T(" %02X"), pAdInfo->Address[i]); 
           macstr += temp; 
          } 
          delete pAdInfo; 
          return macstr; 
         } 
        } 
       } 
      } while ((pAdInfo->Next != NULL)&&((pAdInfo = pAdInfo->Next) != pAdInfo)); 
     } 
     delete pAdInfo_c; 
     return _T(""); 
    }
    


  • @ Jochen

    Danke für deine schnelle Antwort.
    Leider kann ich dein Bsp. nicht kompilieren.

    Ich bekomme jedesmal eine Fehlermeldung in der iphlpapi.h die ich ja aus der SDK hab. error C2065: 'PMIB_ICMP_EX' : nichtdeklarierter Bezeichner....

    Das gleiche passiert auch bei fertigen Beispielen die diese Headerdatei benutzen.

    Was mache ich nur falsch?
    hast du eine Idee?

    gruß Tupo



  • Welches VS?



  • VS 6.0

    wenn ich die SDK/Include an erste Stelle setze, dann funktioniert das Bsp.
    Mache ich das aber in meinem bereits vorhandenen Programm, dann bekomme ich jede menge Fehler?

    Gruß Tupo13



  • Dir fehlt die Library, ich hatte auch das Problem gehabt, bis ich es mir irgendwo gesaugt habe, finde die zip Datei bloss nciht mehr 😕 Sonst hätte ich noch hochgeladen.
    Such mal einfach nach IPHlpAPI.zip

    Hab was gefunden, gucks mir aber ncih an, kannst ja testen:
    ftp://delphi-jedi.org/api/IPHlpAPI.zip



  • @sadi
    Danke für deine Antwort:

    Ich habe die bereits, das sind glaube ich alle die ich benötige:
    IPHlpAPI.dll
    IPHlpAPI.lib
    IPHlpAPI.h

    wenn ich nur die IPHlpAPI.h verwende funkitoniert alles einwandfrei.
    wenn ich nur die pcap.h Datei includiere funktioniert auch alles einwandfrei.

    wenn ich jetzt aber beide verwenden will bekomme ich jede Menge Fehlermeldungen.

    Das liegt wohl daran, dass pcap.h Headerdateien aus den VC98 verwendet und IPHlpAPI.h Headerdateien aus der SDK verwendet. Die Headerdateien haben den gleichen Namen aber sind unterschiedlich...

    Kann das sein? Kann man sowas in den Griff bekommen?
    Oder liegt es an etwas anderem

    Gruß Tupo13



  • OK
    danke für eure Hilfe

    habe jetzt in der wspiapi.h was rausgeworfen, so wie es aussieht funktioniert noch alles

    Danke nochmal
    Gruß Tupo13


Anmelden zum Antworten