Как получить MAC-адрес в Windows с C ++?

Мне нужна помощь с MAC-адресами. Я должен получить это, используя некоторый код на C ++, так что кто-нибудь может мне помочь с этим? Я уже перепробовал много бесполезных кодов. Если существует какой-либо конкретный метод или библиотека, которую я должен изучить, чтобы найти MAC-адрес, я буду очень рад, если кто-нибудь передаст мне ссылку или что-то еще, чтобы узнать больше об этом.

13

Решение

Я понял это люди! Я и парень с работы решаем это с помощью этого кода:

#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.
}
21

Другие решения

C ++ не имеет какой-либо встроенной концепции «MAC-адреса», это не то, что должно существовать для запуска кода C ++. Таким образом, это зависит от платформы. Вы должны сообщить нам, для какой платформы вы пытаетесь это сделать, а также (конечно) прочитать документацию, соответствующую этой платформе.

Если вы хотите сделать это портативным способом, вы должны найти подходящую библиотеку, которая поддерживает все желаемые платформы.

Кроме того, обратите внимание, что компьютер может иметь любое количество сетевых адаптеров, поэтому не требуется один MAC-адрес.

6

По вопросам рекламы [email protected]