在实际项目中,常常需要获取网卡的mac地址,下面,用C语言来做(注意:你很可能没法直接编译运行下面程序,原因和解决办法见博文最后的说明):
#include <stdio.h>
#include <winsock2.h>
#include <iphlpapi.h>
#pragma comment(lib, "iphlpapi.lib")
int main()
{
int i = 0;
int ret = 0;
unsigned long size = 0;
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
ret = GetAdaptersInfo(pIpAdapterInfo,&size);
if (ERROR_BUFFER_OVERFLOW == ret)
{
delete pIpAdapterInfo;
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[size];
ret = GetAdaptersInfo(pIpAdapterInfo, &size);
}
if (ERROR_SUCCESS == ret)
{
while (pIpAdapterInfo) // 每个网卡对应一个链表结点
{
for (i = 0; i < pIpAdapterInfo->AddressLength; i++)
{
if (i < pIpAdapterInfo->AddressLength - 1)
{
printf("%02X-", pIpAdapterInfo->Address[i]);
}
else
{
printf("%02X\n", pIpAdapterInfo->Address[i]);
}
}
pIpAdapterInfo = pIpAdapterInfo->Next;
}
}
if (pIpAdapterInfo)
{
delete pIpAdapterInfo;
pIpAdapterInfo = NULL;
}
return 0;
}
结果打出了两个网卡的地址(我的笔记本上有两个网卡,有线网卡和无线网卡)。
注意:当你编译运行上述程序时,通常会不成功,因为你很有可能缺少相应的头文件和静态库,请在你安装VC++6.0的对应目录中加上相应文件,这些文件分别是:
当然,请不要把这些文件都放在同一目录下,.h文件和.lib文件要区分开来。你可以在网上下载到这些文件,也可以在我的csdn博客资源中下载,不需要你的任何积分。