VC枚举本机MAC地址

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"相关的就是无线网卡,等等....,还需进一步探究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值