win32 获取本机mac地址(两种方法)

来源:互联网 发布:激活淘宝店铺怎么激活 编辑:程序博客网 时间:2024/05/17 23:55

直接上代码

#ifdef _UNICODE#define tString std::wstring#else#define tString std::string#endif#include <httpext.h>#include <windef.h>#include <nb30.h>#pragma comment(lib,"netapi32")#include <atlbase.h>#include <atlconv.h>#include "iphlpapi.h"#pragma comment ( lib, "Iphlpapi.lib" )bool GetMAC(tString &strMac){TCHAR mac[20] = { 0 };NCB ncb;typedef struct _ASTAT_{ADAPTER_STATUS   adapt;NAME_BUFFER   NameBuff[30];}ASTAT, *PASTAT;ASTAT Adapter;typedef struct _LANA_ENUM{UCHAR   length;UCHAR   lana[MAX_LANA];}LANA_ENUM;LANA_ENUM lana_enum;UCHAR uRetCode;memset(&ncb, 0, sizeof(ncb));memset(&lana_enum, 0, sizeof(lana_enum));ncb.ncb_command = NCBENUM;ncb.ncb_buffer = (unsigned char *)&lana_enum;ncb.ncb_length = sizeof(LANA_ENUM);uRetCode = Netbios(&ncb);if (uRetCode != NRC_GOODRET)return false;for (int lana = 0; lana < lana_enum.length; lana++){ncb.ncb_command = NCBRESET;ncb.ncb_lana_num = lana_enum.lana[lana];uRetCode = Netbios(&ncb);if (uRetCode == NRC_GOODRET)break;}if (uRetCode != NRC_GOODRET)return false;memset(&ncb, 0, sizeof(ncb));ncb.ncb_command = NCBASTAT;ncb.ncb_lana_num = lana_enum.lana[0];strcpy_s((char*)ncb.ncb_callname, sizeof("*"),"*");ncb.ncb_buffer = (unsigned char *)&Adapter;ncb.ncb_length = sizeof(Adapter);uRetCode = Netbios(&ncb);if (uRetCode != NRC_GOODRET)return false;_stprintf_s(mac,20, _T("%02X:%02X:%02X:%02X:%02X:%02X"),Adapter.adapt.adapter_address[0],Adapter.adapt.adapter_address[1],Adapter.adapt.adapter_address[2],Adapter.adapt.adapter_address[3],Adapter.adapt.adapter_address[4],Adapter.adapt.adapter_address[5]);strMac = mac;_tprintf(_T("Get local mac address!\n"));return true;}bool getActiveMac(char* sMac){bool bRtn = false;PIP_ADAPTER_INFO pAdapterInfo;PIP_ADAPTER_INFO pAdapter = NULL;DWORD dwRetVal = 0;pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS){free(pAdapterInfo);pAdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen);}if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR){pAdapter = pAdapterInfo;char szMac[20] = { 0 };char szAddress[4] = { 0 };while (pAdapter){if (strcmp(pAdapter->IpAddressList.IpAddress.String, "0.0.0.0") != 0){for (UINT i = 0; i < pAdapter->AddressLength; i++){sprintf_s(szAddress, "%02X", pAdapter->Address[i]);strcat_s(szMac, szAddress);if (i != pAdapter->AddressLength - 1){strcat_s(szMac, ":");}}break;}pAdapter = pAdapter->Next;}memcpy(sMac, szMac, strlen(szMac));bRtn = true;}return bRtn;}int _tmain(int argc, _TCHAR* argv[]){_tprintf(_T("one method!\n"));tString strMac;if (GetMAC(strMac)){_tprintf(_T("%s\n"), strMac.c_str());}else{_tprintf(_T("Get nothing!\n"));}_tprintf(_T("\ntwo method!\n"));char sMac[20] = { 0 };getActiveMac(sMac);printf("%s\n", sMac);return 0;}


0 0