获得当前网卡MAC
来源:互联网 发布:大数据金融行业的应用 编辑:程序博客网 时间:2024/05/12 13:36
看了很多资料,获得MAC方法也很多,但是再多网卡的时候,有的方法不能正确获得当前使用的MAC地址,这里讲我的方法贡献出来,就算是在多网卡情况下,也能准确获得当前连接的网卡的MAC.
我已经将它封装成了类,可以直接使用.
#include "stdafx.h"#include <atlbase.h>#include "StdAfx.h"#include "GetMac.h"#include <string.h>#pragma comment(lib,"Wininet.lib")using namespace ATL;#define OID_802_3_PERMANENT_ADDRESS 0x01010101#define OID_802_3_CURRENT_ADDRESS 0x01010102#define IOCTL_NDIS_QUERY_GLOBAL_STATS 0x00170002const char* GetMac:: key = "lykjLdy173";GetMac::GetMac(void){}GetMac::~GetMac(void){}string GetMac::GetComputerIdentity(){return GetMac::GetMacAddress();}string GetMac::GetMacAddress(){// {6A8DCD5A-CB21-4FFB-BA2D-622381D69E3C} 网卡标识,xp下可以在注册表下对应位置找到,本例:// HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\2\ServiceNameHANDLE hDev = CreateFile("//./{6A8DCD5A-CB21-4FFB-BA2D-622381D69E3C}",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL, OPEN_EXISTING, 0, 0);if(hDev == INVALID_HANDLE_VALUE){CRegKey reg;string KeyPath = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards";string netCardKey;if (reg.Open(HKEY_LOCAL_MACHINE, KeyPath.c_str()) != ERROR_SUCCESS){return "";}int i = 0;while(1){char buff[1024];memset(buff, 0, sizeof(buff));DWORD nLen = sizeof(buff);if(reg.EnumKey(i, buff, &nLen) != ERROR_SUCCESS){break;}i++; CRegKey x; KeyPath += "\\"; string szBuff = buff; KeyPath += szBuff;if(x.Open(HKEY_LOCAL_MACHINE, KeyPath.c_str() )!= ERROR_SUCCESS){continue;}nLen = sizeof(buff);memset(buff,0, sizeof(buff));x.QueryStringValue("ServiceName", buff, &nLen);szBuff = "";szBuff = buff;netCardKey += "//./";netCardKey += szBuff;hDev = CreateFile(netCardKey.c_str(), GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL, OPEN_EXISTING, 0, 0);if(hDev == INVALID_HANDLE_VALUE){continue;}else{break;}}}if(hDev == INVALID_HANDLE_VALUE) return "";int inBuf;BYTE outBuf[256]= {0};DWORD BytesReturned;inBuf = OID_802_3_PERMANENT_ADDRESS;char rt[64];memset(rt, 0, 64);if(DeviceIoControl(hDev, IOCTL_NDIS_QUERY_GLOBAL_STATS, (LPVOID)&inBuf,4,outBuf,256,&BytesReturned,NULL)){sprintf(rt, "%02X%02X%02X%02X%02X%02X",outBuf[0],outBuf[1],outBuf[2],outBuf[3],outBuf[4],outBuf[5]);}return string(rt);}
写这些东西就是为了让自己以后忘记的时候可以过来看看,欢迎拍砖。
- 获得当前网卡MAC
- 何获得当前网卡的mac地址
- 获得网卡MAC地址
- 获得网卡MAC地址
- NETBIOS()获得网卡MAC
- 获得网卡MAC地址 .
- 获得网卡MAC地址
- 获得当前使用网卡名
- JAVA获得网卡MAC地址
- 再议NETBIOS()获得网卡MAC
- AU3--获得网卡mac地址
- java 获得网卡MAC地址
- ASP获得网卡的MAC地址
- C#获得CPU,硬盘,网卡MAC序号
- C#获得CPU,硬盘,网卡MAC序号
- 用Winpcap获得网卡的MAC地址
- ASP获得网卡的MAC地址
- delphi获得网卡的MAC地址
- 关于SAD,SAE,SATD,SSD,SSE,MAD,MAE,MSD,MSE
- 转载加自己的见解 之从编译器角度分析C语言中数组名和指针的区别
- 【spring】spring MVC入门
- JAVA对文件类型的校验 .
- CMS之图片管理(1)
- 获得当前网卡MAC
- 网易笔试题(java 、 c++ 、软件测试等)
- Ubuntu使用FAQ
- Matlab 基本命令、快捷键及常用操作
- STM32F0之SPI(使用固件库)
- asp.net中使用Dataset导出数据到xml或者xls
- Android之BaseExpandableListAdapter使用心得(QQ续一)
- 《想骗我没门》读书笔记,第二招 观形察色
- jetty快速入门与嵌入使用 jetty