概述
因为项目中需要使用liscence,所以就想到了使用网卡的MAC地址加密。这里需要获取网卡的MAC地址。
首先使用的是Netbios()函数获取MAC地址,但是发现只获取了正在联网使用的那个网卡的MAC地址,不能获取所有的网卡MAC地址。
通过这个网站https://www.codeguru.com/cpp/i-n/network/networkinformation/article.php/c5451/Three-ways-to-get-your-MAC-address.htm使用GetAdaptersInfo()函数可以获取所有的网卡MAC地址。
#include <Iphlpapi.h>
#pragma comment(lib, "iphlpapi.lib")
static bool GetMACaddress(char *pMAC,int nType,char *pDescription)
{
USES_CONVERSION;
char szMac[100] = { 0 };
IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information for up to 16 NICs
DWORD dwBufLen = sizeof(AdapterInfo); // Save the memory size of buffer
DWORD dwStatus = GetAdaptersInfo( // Call GetAdapterInfo
AdapterInfo, // [out] buffer to receive data
&dwBufLen); // [in] size of receive data buffer
assert(dwStatus == ERROR_SUCCESS); // Verify return value is valid, no buffer overflow
MIB_IF_TYPE_ETHERNET;
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info
do {
if (pAdapterInfo->Type == nType)
{
strlwr(pAdapterInfo->Description);
if (strstr(pAdapterInfo->Description, pDescription) != NULL)
{
sprintf(pMAC, "%02X-%02X-%02X-%02X-%02X-%02X",
pAdapterInfo->Address[0], pAdapterInfo->Address[1], pAdapterInfo->Address[2],
pAdapterInfo->Address[3], pAdapterInfo->Address[4], pAdapterInfo->Address[5]);
return true;
}
}
memset(szMac, 0, sizeof(szMac));
pAdapterInfo = pAdapterInfo->Next; // Progress through linked list
} while (pAdapterInfo);// Terminate if last adapter
return false;
}
这里需要PIP_ADAPTER_INFO结构体
PIP_ADAPTER_INFO::Type是网卡类型,6代表有限网卡和网卡 ,71代表虚拟网卡、蓝牙设备,无线网卡。
PIP_ADAPTER_INFO::Description是网卡的描述,无线=wireless 、有限=ether 这个描述字符串不太确定。
PIP_ADAPTER_INFO::Address 是6个字节的MAC地址 是HEX。
最后
以上就是孝顺冬瓜为你收集整理的2020-10-12获取网卡的MAC地址的全部内容,希望文章能够帮你解决2020-10-12获取网卡的MAC地址所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复