Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

char* getMAC();

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

AdapterInfo = (IP_ADAPTER_INFO *) malloc(sizeof(IP_ADAPTER_INFO));
if (AdapterInfo == NULL) {
printf("Error allocating memory needed to call GetAdaptersinfo\n");

}

// Make an initial call to GetAdaptersInfo to get the necessary size into the dwBufLen     variable
if (GetAdaptersInfo(AdapterInfo, &dwBufLen) == ERROR_BUFFER_OVERFLOW) {

AdapterInfo = (IP_ADAPTER_INFO *) malloc(dwBufLen);
if (AdapterInfo == NULL) {
printf("Error allocating memory needed to call GetAdaptersinfo\n");
 }
 }

if (GetAdaptersInfo(AdapterInfo, &dwBufLen) == NO_ERROR) {
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info
do {
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);
return mac_addr;

printf("\n");
pAdapterInfo = pAdapterInfo->Next;        
}while(pAdapterInfo);                        
}
free(AdapterInfo);
}

Ответ 2

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

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

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