Один из распространенных методов - использование битов из UUID, но это не совсем надежно. Например, он вернет значение даже на машине, на которой нет сетевого адаптера.
К счастью, есть способ, который надежно работает с любой относительно свежей версией Windows. MSDN говорит, что он восходит только к Windows 2000, но если память работает, он также работает на NT 4, начиная с SP 5, в случае, если кто-то все еще использует NT 4.
#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>
int main() {
IP_ADAPTER_INFO *info = NULL, *pos;
DWORD size = 0;
GetAdaptersInfo(info, &size);
info = (IP_ADAPTER_INFO *)malloc(size);
GetAdaptersInfo(info, &size);
for (pos=info; pos!=NULL; pos=pos->Next) {
printf("\n%s\n\t", pos->Description);
printf("%2.2x", pos->Address[0]);
for (int i=1; i<pos->AddressLength; i++)
printf(":%2.2x", pos->Address[i]);
}
free(info);
return 0;
}
Пожалуйста, прости древний код C ...