欢迎转载,但转载时请注明本博客出处:http://blog.csdn.net/pingd/article/details/22397983,谢谢!
使用C语言获取windows操作系统MAC列表,包含实际存在的物理网卡以及虚拟网卡,话不多说,直接上代码:
//获取系统mac列表,每一个mac地址保存空间大小为18字节
//成功返回0,失败返回-1
int GetSysMac(int &macNum,char macList[][18])
{
char mac[18] = { 0 };
//记录网卡数量
int netCardNum = 0;
PIP_ADAPTER_INFO pIpAdapterInfo = (PIP_ADAPTER_INFO)malloc(sizeof(IP_ADAPTER_INFO));
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
if (ERROR_BUFFER_OVERFLOW == nRel) {
free(pIpAdapterInfo);
//重新申请内存
pIpAdapterInfo = (PIP_ADAPTER_INFO)malloc(stSize);
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
}
if (ERROR_SUCCESS == nRel) {
while (pIpAdapterInfo) {
char temp[4] = { 0 };
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++) {
if (i < pIpAdapterInfo->AddressLength-1)
{
sprintf(temp,"%02X:", pIpAdapterInfo->Address[i]);
strcat(mac,temp);
memset(temp,0,sizeof(temp));
}
else
{
sprintf(temp,"%02X", pIpAdapterInfo->Address[i]);
strcat(mac,temp);
memset(temp,0,sizeof(temp));
}
}
memcpy(macList[netCardNum],mac,sizeof(mac));
memset(mac,0,sizeof(mac));
pIpAdapterInfo = pIpAdapterInfo->Next;
netCardNum++;
}
}
//释放内存空间
if (pIpAdapterInfo)
{
free (pIpAdapterInfo);
}
macNum = netCardNum;
return 0;
}
其中macNum是所获取到的系统MAC数量,MAC列表存放在macList中。
完整代码下载请猛戳右边红色→(下载)