Created
January 31, 2020 10:23
-
-
Save hash3liZer/4991c20ef3af15c69158b68723690a50 to your computer and use it in GitHub Desktop.
Getting MAC address of Ethernet Interface of a PC in C++
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <Windows.h> | |
#include <Iphlpapi.h> | |
#include <Assert.h> | |
#include <string> | |
#pragma comment(lib, "iphlpapi.lib") | |
char* getMAC(); | |
int main(){ | |
char* pMac = getMAC(); | |
system("pause"); | |
free(pMac); | |
} | |
string gMAC() { | |
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. | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment