16

MAC アドレスについて助けが必要です。私はC++でいくつかのコードを使用してそれを取得する必要があるので、誰かがこれを手伝ってくれますか? 私はすでに多くの役に立たないコードを試しました。MACアドレスを見つけるために研究すべき特定の方法またはライブラリが存在する場合、誰かが私にリンクまたはこれについてもっと知るために何かを渡してくれれば、私はとても幸せです.

4

2 に答える 2

31

私はそれを人々に手に入れました!私と仕事の男は、このコードを使用してこれを解決します:

#include <stdio.h>
#include <Windows.h>
#include <Iphlpapi.h>
#include <Assert.h>
#pragma comment(lib, "iphlpapi.lib")

char* getMAC();

int main(){ 
  char* pMac = getMAC();
  system("pause");
  free(pMac);
}
char* getMAC() {
  PIP_ADAPTER_INFO AdapterInfo;
  DWORD dwBufLen = sizeof(IP_ADAPTER_INFO);
  char *mac_addr = (char*)malloc(18);

  AdapterInfo = (IP_ADAPTER_INFO *) malloc(sizeof(IP_ADAPTER_INFO));
  if (AdapterInfo == NULL) {
    printf("Error allocating memory needed to call GetAdaptersinfo\n");
    free(mac_addr);
    return NULL; // it is safe to call free(NULL)
  }

  // Make an initial call to GetAdaptersInfo to get the necessary size into the dwBufLen variable
  if (GetAdaptersInfo(AdapterInfo, &dwBufLen) == ERROR_BUFFER_OVERFLOW) {
    free(AdapterInfo);
    AdapterInfo = (IP_ADAPTER_INFO *) malloc(dwBufLen);
    if (AdapterInfo == NULL) {
      printf("Error allocating memory needed to call GetAdaptersinfo\n");
      free(mac_addr);
      return NULL;
    }
  }

  if (GetAdaptersInfo(AdapterInfo, &dwBufLen) == NO_ERROR) {
    // Contains pointer to current adapter info
    PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
    do {
      // technically should look at pAdapterInfo->AddressLength
      //   and not assume it is 6.
      sprintf(mac_addr, "%02X:%02X:%02X:%02X:%02X:%02X",
        pAdapterInfo->Address[0], pAdapterInfo->Address[1],
        pAdapterInfo->Address[2], pAdapterInfo->Address[3],
        pAdapterInfo->Address[4], pAdapterInfo->Address[5]);
      printf("Address: %s, mac: %s\n", pAdapterInfo->IpAddressList.IpAddress.String, mac_addr);
      // print them all, return the last one.
      // return mac_addr;

      printf("\n");
      pAdapterInfo = pAdapterInfo->Next;        
    } while(pAdapterInfo);                        
  }
  free(AdapterInfo);
  return mac_addr; // caller must free.
}
于 2012-12-03T17:08:57.203 に答える
4

C++ には "MAC アドレス" の概念が組み込まれていません。C++ コードを実行するために存在しなければならないものではありません。したがって、これはプラットフォーム固有です。これを実行しようとしているプラ​​ットフォームをお知らせください。また、(もちろん) そのプラットフォームに対応するドキュメントもお読みください。

移植可能な方法でこれを行いたい場合は、必要なすべてのプラットフォームをサポートする適切なライブラリを探す必要があります。

また、コンピューターには任意の数のネットワーク アダプターを取り付けることができるため、MAC アドレスが1 つだけである必要はありません。

于 2012-11-30T14:00:21.017 に答える