附加依赖项:iphlpapi.lib
包含头文件:#include <Iphlpapi.h>
代码:
void GetMac()
{
IP_ADAPTER_INFO *pIpAdapterInfo = new IP_ADAPTER_INFO();
//网卡信息结构
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
//得到结构体大小,用于GetAdaptersInfo函数的参数
int nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);
//获取网卡信息,stSize是一个in/out参数
if(ERROR_BUFFER_OVERFLOW == nRel)
{
//如果函数返回的是ERROR_BUFFER_OVERFLOW,则说明函数参数传递的内存空间不够,同时,stSize表示需要的空间大小
//释放原来的内存空间
delete pIpAdapterInfo;
//重新申请内存空间以存储所有网卡信息
pIpAdapterInfo = (IP_ADAPTER_INFO *)new BYTE[stSize];
//再次调用GetAdaptersInfo函数
nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);
}
if (ERROR_SUCCESS == nRel)
{
//输出网卡信息
output(pIpAdapterInfo, "192.168.7.10");
}
//释放内存空间
if (pIpAdapterInfo)
{
delete pIpAdapterInfo;
}
return;
}
///函数作用,输出网卡信息
void output(PIP_ADAPTER_INFO pIpAdapterInfo, const char* localIp)
{
char tmp[8];
string mac;
//可能有多网卡,因此通过循环去判断
while (pIpAdapterInfo)
{
printf("网卡名称:%s \n", pIpAdapterInfo->AdapterName);
printf("网卡描述:%s \n", pIpAdapterInfo->Description);
printf("网卡IP地址:");
//可能网卡有多IP,因此通过循环去判断
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
do
{
printf("%s\n", pIpAddrString->IpAddress.String);
pIpAddrString=pIpAddrString->Next;
} while (pIpAddrString);
printf("网卡MAC地址:");
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
{
if (i==pIpAdapterInfo->AddressLength-1)
{
printf("%02x\n", pIpAdapterInfo->Address[i]);
}
else
{
printf("%02x-", pIpAdapterInfo->Address[i]);
}
}
//下一个网卡
pIpAdapterInfo = pIpAdapterInfo->Next;
printf("*****************************************************\n");
}
return;
}
测试结果: