windows下获取MAC地址的三种方法

来源:互联网 发布:网络mg老虎机赢钱技巧 编辑:程序博客网 时间:2024/05/01 07:58

 1、发送ARP包获取MAC地址:

#include <windows.h>#include <stdio.h>#include "Iphlpapi.h"#pragma comment(lib, "IpHlpApi.lib")#pragma comment(lib, "ws2_32.lib")int main(int argc,char * argv[]){int iReturn;DWORD dwIP;BYTE byMAC[6];DWORD dwLen;WSADATA WsaData;WSAStartup(MAKEWORD(2, 0), &WsaData);__try {printf("IP2MAC Ver 1.0 -- Get MAC address from IP address though ARP request.\n\n");if (argc != 2){printf("Usage: %s <IP>\n", argv[0]);__leave;}dwIP = inet_addr(argv[1]);if (dwIP == INADDR_NONE){printf("Invalid IP address: %s.\n", argv[1]);__leave;}// 发送ARP查询包获得 MAC 地址dwLen = 6;iReturn = SendARP(dwIP, 0, (PULONG) &byMAC, &dwLen);if (iReturn != NO_ERROR){printf("Error: Send ARP request. \nBe sure that connectting to %s need no gateway.\n", argv[1]);__leave;}printf("%02X-%02X-%02X-%02X-%02X-%02X\n", byMAC[0], byMAC[1], byMAC[2], byMAC[3], byMAC[4], byMAC[5]);}__finally{WSACleanup();}return 0;}

 

2、NDIS(DDK)通过驱动程序获取MAC地址

ndis规范中说明,网卡驱动程序支持ioctl_ndis_query_stats接口
参数如下:
OID_802_3_PERMANENT_ADDRESS :物理地址
OID_802_3_CURRENT_ADDRESS   :mac地址
于是我们的方法就得到了。

首先,看看注册表,找一找网卡有几块,分别是什么设备名。
具体位置和os有关,2000下在hlm\software\microsoft\windows nt\current version\networkcards。

然后createfile(devicename,...)注意,要用linkname,因此
还要加上"////.//device//".

接着
deviceiocontrol(hmac,IOCTL_NDIS_QUERY_STATS,
OID_802_3_PERMANENT_ADDRESS/OID_802_3_CURRENT_ADDRESS...)

#include <windows.h>#include <stdio.h>//#include <iptypes.h>#include <iphlpapi.h>#include <NtDDNdis.h>#pragma comment ( lib, "iphlpapi.lib" ) BOOL WINAPI GetPhyMacAddress(char* strServiceName){BOOL  bRet = FALSE;char  pstrBuf[512];wsprintfA(pstrBuf, "\\\\.\\%s", strServiceName);HANDLE  hDev  = CreateFile(pstrBuf, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);if ( hDev != INVALID_HANDLE_VALUE ){int    inBuf;BYTE  outBuf[256]  = { 0 };DWORD  BytesReturned;inBuf  = OID_802_3_PERMANENT_ADDRESS;if ( DeviceIoControl(hDev, IOCTL_NDIS_QUERY_GLOBAL_STATS, (LPVOID)&inBuf, 4, outBuf, 256, &BytesReturned, NULL) ){sprintf(pstrBuf, "物理mac:%02X-%02X-%02X-%02X-%02X-%02X\n",outBuf[0], outBuf[1], outBuf[2], outBuf[3], outBuf[4], outBuf[5]);printf(pstrBuf);bRet  = TRUE;}inBuf  = OID_802_3_CURRENT_ADDRESS;if ( DeviceIoControl(hDev, IOCTL_NDIS_QUERY_GLOBAL_STATS, (LPVOID)&inBuf, 4, outBuf, 256, &BytesReturned, NULL) ){sprintf(pstrBuf, "当前mac:%02X-%02X-%02X-%02X-%02X-%02X\n",outBuf[0], outBuf[1], outBuf[2], outBuf[3], outBuf[4], outBuf[5]);printf(pstrBuf);bRet  = TRUE;}CloseHandle(hDev);}return bRet;}//  网卡 MAC 地址BOOL GetMacAddress(){UINT uErrorCode  = 0;PIP_ADAPTER_INFO  pAda;ULONG uSize = 0;DWORD dwResult = GetAdaptersInfo(NULL, &uSize);if ( dwResult == ERROR_BUFFER_OVERFLOW ){pAda = (PIP_ADAPTER_INFO)new BYTE[uSize];PIP_ADAPTER_INFO  piai  = pAda ;dwResult  = GetAdaptersInfo(piai, &uSize);if ( ERROR_SUCCESS == dwResult ){while ( piai ){printf("名称:%s\n", piai->AdapterName);printf("描述:%s\n", piai->Description);printf("类型:%d\n", piai->Type);GetPhyMacAddress(piai->AdapterName);printf("\n");piai = piai->Next;}}delete[] pAda;}return TRUE;}int main(void){GetMacAddress() ;return 0 ;}

3、NetAPI使用得到MAC

#include <windows.h>//#include <wincon.h>#include <stdlib.h>#include <stdio.h>#include <time.h>#pragma comment(lib, "NetAPI32.Lib")typedef struct _ASTAT_{ADAPTER_STATUS adapt;NAME_BUFFER    NameBuff [30];}ASTAT, * PASTAT;ASTAT Adapter;int main (void){NCB Ncb;UCHAR uRetCode;char NetName[50];LANA_ENUM   lenum;int      i;memset( &Ncb, 0, sizeof(Ncb) );Ncb.ncb_command = NCBENUM;Ncb.ncb_buffer = (UCHAR *)&lenum;Ncb.ncb_length = sizeof(lenum);uRetCode = Netbios( &Ncb );printf( "The NCBENUM return code is: 0x%x \n", uRetCode );for(i=0; i < lenum.length ;i++){memset( &Ncb, 0, sizeof(Ncb) );Ncb.ncb_command = NCBRESET;Ncb.ncb_lana_num = lenum.lana[i];uRetCode = Netbios( &Ncb );printf( "The NCBRESET on LANA %d return code is: 0x%x \n",lenum.lana, uRetCode );memset( &Ncb, 0, sizeof (Ncb) );Ncb.ncb_command = NCBASTAT;Ncb.ncb_lana_num = lenum.lana[i];strcpy((char*)Ncb.ncb_callname,  "*               " );Ncb.ncb_buffer = (UCHAR *) &Adapter;Ncb.ncb_length = sizeof(Adapter);uRetCode = Netbios( &Ncb );printf( "The NCBASTAT on LANA %d return code is: 0x%x \n",lenum.lana, uRetCode );if ( uRetCode == 0 ){printf( "The Ethernet Number on LANA %d is:%02X-%02X-%02X-%02X-%02X-%02X\n",lenum.lana,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] );}}} 

	
				
		
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 别人给交错话费怎么办 联通流量不到账怎么办 卖家拒绝退款怎么办? 淘宝退款后红包怎么办 手机不能吃鸡怎么办? 在国外手机软件好多不支持怎么办 淘宝店拒绝退款怎么办 app没有退款资格怎么办 手机无法计步怎么办 抖音机型不支持怎么办 用nfc不支持卡片怎么办 移动怎么办省内流量包 手机交不了话费怎么办 淘宝快递不签收怎么办 快递买家不签收怎么办 淘宝退货未收货怎么办 淘宝退衣服运费怎么办 手机流量不到账怎么办 淘宝水果坏了怎么办 用微信充值话费充成空号了怎么办 苹果id被拉黑了怎么办 苹果app不退款怎么办 合同退款不退怎么办 微信充值q币被骗怎么办 小米手机存储空间不够怎么办 小米mix2s存储空间不够怎么办 进货一直没发票怎么办 魅蓝note5卡怎么办 电话费套餐花不了怎么办 墙和床头有间缝怎么办 床板里有虫子怎么办 松木床板味道大怎么办 寝室床板有虫子怎么办 胶合板当床板有气味怎么办 淘宝食品有问题怎么办 淘宝买东西碎了怎么办 被淘宝商家骚扰怎么办 闲鱼被别人拉黑怎么办 三无工厂抓到怎么办 淘宝买东西卖家不发货怎么办 打假人异地起诉怎么办