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
- win32 获取本机mac地址(两种方法)
- 获取本机mac地址的方法
- 两种获取本机IP地址的方法
- c# 获取本机IP地址的两种方法
- 获取mac地址的两种方法
- Android获取本机Mac地址及IP地址方法
- android:获取本机Mac地址及IP地址方法
- Android获取本机Mac地址及IP地址方法
- Android 获取本机Mac 地址方法及ip地址
- 获取本机mac地址
- 获取本机MAC地址
- 获取本机MAC地址
- 获取本机MAC地址
- 获取本机MAC地址
- 获取本机mac地址
- 获取本机MAC地址
- 获取本机MAC地址
- 两种socket获取本机IP地址方法及获取ip对应网卡
- jiebaR中文分词 —— R的灵活,C的效率
- 【android】Scroller类介绍
- 上传File时,浏览器总是添加<pre>的解决办法
- 1033. To Fill or Not to Fill
- [C++]LeetCode: 96 Maximum Product Subarray(动态规划)
- win32 获取本机mac地址(两种方法)
- ageEncoding="utf-8"%和charset="utf-8"
- 关于使用superSlide完成卡片的横向滚动
- urllib2 使用
- window.open与window.opener小记
- 比较全的 POM.xml
- dns解析超时故障分析
- CEILING_2_POWER
- IOS7,8设置APP右上角图标通知数字的区别