获取MAC地址
[cpp]
// 定义网卡类型
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_API
DWORD
BF_GetMacAddr(
IN BFSYS_MAC_T type, // 待取得网卡类型
OUT BFMacAddrArray *pAddrAry = NULL // 输出对应网卡类型的地址信息
);
// 定义网卡类型
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_API
DWORD
BF_GetMacAddr(
IN BFSYS_MAC_T type, // 待取得网卡类型
OUT BFMacAddrArray *pAddrAry = NULL // 输出对应网卡类型的地址信息
);
[cpp]
// 取得网卡地址信息,返回对应类型网卡的总数量
BFLIB_API
DWORD
BF_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
)
{
补充:软件开发 , C++ ,