1.引用头文件"Iphelpapi.h",lib文件"IPHlpApi.Lib" ,该库文字可以直接在网上download。
2.代码如下:
CString str;
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
if (ERROR_BUFFER_OVERFLOW==nRel)
{
delete pIpAdapterInfo;
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
}
if (ERROR_SUCCESS==nRel)
{
PIP_ADAPTER_INFO pInfo = pIpAdapterInfo;
while (pInfo)
{
str.Format("名称:%s\n",pInfo->AdapterName);
//TRACE(str);
cout<<str.GetBuffer(0);
str.Format("描述:%s\n",pInfo->Description);
//TRACE(str);
cout<<str.GetBuffer(0);
//TRACE("ADDR:");
cout<<"ADDR:";
int i = 0;
for ( i = 0; i < pInfo->AddressLength; i++)
{
if (i==pInfo->AddressLength-1)
{
//TRACE("%02x\n", pInfo->Address[i]);
str.Format("%02x\n",pInfo->Address[i]);
cout<<str.GetBuffer(0);
}
else
{
//TRACE("%02x-", pInfo->Address[i]);
str.Format("%02x-",pInfo->Address[i]);
cout<<str.GetBuffer(0);
}
}
//TRACE("IP is:");
cout<<"IP is:";
IP_ADDR_STRING *pIpAddrString =&(pInfo->IpAddressList);
do
{
//TRACE(pIpAddrString->IpAddress.String);
cout<<pIpAddrString->IpAddress.String<<endl;
//TRACE("\n");
pIpAddrString=pIpAddrString->Next;
} while (pIpAddrString);
pInfo = pInfo->Next;
//TRACE("*****************************************************\n");
cout<<"*****************************************************\n\n";
}
}
if (pIpAdapterInfo)
{
delete[] pIpAdapterInfo;
pIpAdapterInfo = NULL;
}
3.获取到的本机MAC地址很有可能是很多个的,如果一台笔记本且装了虚拟机,多半至少有三个网卡MAC:有线网卡、无线网卡、虚拟机的网卡,如何用VC程序来区分它们,这个确实是被拦住了。在网上寻找多日,也没有准确的方法能判定如下两个问题:是哪个网卡正在上网?如何区分是不是虚拟网卡?一般也都是通过网卡描述符,在里面找些特征字符串来进行归类,比如有"vmware"关键字的那就识别成虚拟机网卡,有"wireless"相关的就是无线网卡,等等....,还需进一步探究。