获取MAC地址
来源:互联网 发布:人工智能与制造业 ppt 编辑:程序博客网 时间:2024/06/14 05:32
// 定义网卡类型typedef DWORD BFSYS_MAC_T;#define BFSYS_MAC_ALL 0xFFFFFFFF // 所有网卡#define BFSYS_MAC_PHYSICAL 0x00000001 // 物理网卡#define BFSYS_MAC_WIRELESS 0x00000002 // 无线网卡#define BFSYS_MAC_VIRTUAL 0x00000004 // 虚拟网卡(比如虚拟机带的虚拟网卡)#define BFSYS_MAC_UNKNOWN 0x80000000 // 未知类型网卡// 定义网卡MAC地址结构及数组typedef struct _BFMAC_ADDR_STR_{BFSYS_MAC_T Type;DWORD AddressLength;BYTE Address[32];}BFMACADDR, *PBFMACADDR;typedef vector<BFMACADDR> BFMacAddrArray;// 取得网卡地址信息,返回对应类型网卡的总数量BFLIB_APIDWORDBF_GetMacAddr(IN BFSYS_MAC_T type, // 待取得网卡类型OUT BFMacAddrArray *pAddrAry = NULL // 输出对应网卡类型的地址信息);
// 取得网卡地址信息,返回对应类型网卡的总数量BFLIB_APIDWORDBF_GetMacAddr(IN BFSYS_MAC_T type, // 待取得网卡类型OUT BFMacAddrArray *pAddrAry // 输出对应网卡类型的地址信息){// 清除上次信息if (pAddrAry != NULL){pAddrAry->clear();}// 获取Adapter信息ULONG ulSize = sizeof(IP_ADAPTER_INFO);BYTE *pBuf = new BYTE[ulSize];if (pBuf == NULL){return 0;}PIP_ADAPTER_INFO pIPAdapterInfo = (PIP_ADAPTER_INFO)pBuf;DWORD dwRet = ::GetAdaptersInfo(pIPAdapterInfo, &ulSize);// 缓冲区溢出则重新申请内存if (ERROR_BUFFER_OVERFLOW == dwRet){delete[] pBuf ;pBuf = NULL;pIPAdapterInfo = NULL;pBuf = new BYTE[ulSize];if (pBuf == NULL){return 0;}pIPAdapterInfo = (PIP_ADAPTER_INFO)pBuf;dwRet = ::GetAdaptersInfo(pIPAdapterInfo, &ulSize); }// 获取Adapter信息失败if (dwRet != ERROR_SUCCESS){delete[] pBuf;pBuf = NULL;pIPAdapterInfo = NULL;return 0;}// 遍历所有网卡信息DWORD dwTotalCount = 0;BFMACADDR MacAddr;while (pIPAdapterInfo != NULL){// 得到MAC地址信息memset(&MacAddr, 0, sizeof(MacAddr));MacAddr.AddressLength = pIPAdapterInfo->AddressLength;for (UINT i=0; i<pIPAdapterInfo->AddressLength; i++){MacAddr.Address[i] = pIPAdapterInfo->Address[i];}// 是否无线网卡if (pIPAdapterInfo->Type == 71){MacAddr.Type = BFSYS_MAC_WIRELESS;}// 是否物理网卡else if ( pIPAdapterInfo->Type == MIB_IF_TYPE_ETHERNET && strstr(pIPAdapterInfo->Description, "PCI") > 0 ){MacAddr.Type = BFSYS_MAC_PHYSICAL;}// 是否虚拟网卡else if ( pIPAdapterInfo->Type == MIB_IF_TYPE_ETHERNET && strstr(pIPAdapterInfo->Description, "Virtual") > 0 ){MacAddr.Type = BFSYS_MAC_VIRTUAL;}// 其他网卡else{MacAddr.Type = BFSYS_MAC_UNKNOWN;}// 是否需要的网卡类型if ((type & MacAddr.Type) == MacAddr.Type){dwTotalCount += 1;if (pAddrAry != NULL){pAddrAry->push_back(MacAddr);}}// 遍历下一个AdapterpIPAdapterInfo = pIPAdapterInfo->Next;}// 释放内存delete[] pBuf;pBuf = NULL;pIPAdapterInfo = NULL;// 返回获取到的数量return dwTotalCount;}
需要使用到
#include <Iphlpapi.h>
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
特别注意:在描述信息里面查"PCI"来确定是否物理网卡是不完全正确的,有的网卡就没有这个信息,可以修改为当类型是MIB_IF_TYPE_ETHERNET且不是虚拟网卡时就认为是物理网卡。
- 获取MAC地址
- 获取Mac地址
- 获取Mac地址
- 获取MAC地址
- 获取MAC地址(Err)
- 获取网卡MAC地址
- 获取客户端MAC地址
- 获取mac地址
- 获取客户端mac地址
- 获取mac地址
- 获取网卡MAC地址
- 获取MAC地址。。。。。。。。。
- 获取MAC地址
- 获取计算机mac地址
- 获取网卡Mac地址
- 如何获取MAC地址
- 获取客户端MAC地址
- 获取网卡MAC地址
- Adb connection Error:远程主机强迫关闭了一个现有的连接。
- EXC-BAD-ACCESS当程序崩溃时,我们怎么做?part-02
- VC++6.0调试工具使用初步
- Android Recovery系统分析2----升级包目录结构分析
- Horner Rule(霍纳法则)
- 获取MAC地址
- erlang监控树 supervisor
- 腾讯360再较量 谁是反垄断巨头
- linux下常用命令
- 汉诺塔(c语言实现)
- uva507 - Jill Rides Again(好题)
- linux下用curlftps rhel6 实现
- iPhone Crash Log转换符号表
- thinkphp session的用法