获取mac地址一般在软件创建注册表信息有相当大的用处。原因是mac地址通常是计算机唯一的物理地址。
利用这些信息,我们可以通过加密mac地址进行程序加密包含等等...
下给两个例子-如何获取mac信息:
例子一:
1 #include "winsock.h" 2 #include "stdio.h" 3 #include <IPHlpApi.h> 4 #pragma comment(lib,"Iphlpapi.lib") 5 6 int main(void) 7 { 8 PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();// PIP_ADAPTER_INFO结构体指针存储本机网卡信息 9 unsigned long stSize = sizeof(IP_ADAPTER_INFO);// 得到结构体大小,用于GetAdaptersInfo参数 10 int netCardNum = 0;// 记录网卡数量 11 int IPnumPerNetCard = 0; // 记录每张网卡上的IP地址数量 12 13 //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量 14 int nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize); 15 if (ERROR_BUFFER_OVERFLOW == nRel) 16 { 17 /*如果函数返回的是ERROR_BUFFER_OVERFLOW 18 则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小 19 这也是说明为什么stSize既是一个输入量也是一个输出量 20 释放原来的内存空间*/ 21 delete pIpAdapterInfo; 22 pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize]; // 重新申请内存空间用来存储所有网卡信息 23 nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量 24 } 25 if (ERROR_SUCCESS == nRel) 26 { 27 while (pIpAdapterInfo) 28 { 29 printf(" ┌────────────Num.%d────────────┐ ", ++netCardNum); 30 printf("│Name:%s ", pIpAdapterInfo->AdapterName); 31 printf("│Desc:%s ", pIpAdapterInfo->Description); 32 switch (pIpAdapterInfo->Type) 33 { 34 case MIB_IF_TYPE_OTHER: 35 printf("│Type:OTHER "); 36 break; 37 case MIB_IF_TYPE_ETHERNET: 38 printf("│Type:ETHERNET "); 39 break; 40 case MIB_IF_TYPE_TOKENRING: 41 printf("│Type:TOKENRING "); 42 break; 43 case MIB_IF_TYPE_FDDI: 44 printf("│Type:FDDI "); 45 break; 46 case MIB_IF_TYPE_PPP: 47 printf("│Type:PPP "); 48 break; 49 case MIB_IF_TYPE_LOOPBACK: 50 printf("│Type:LOOPBACK "); 51 break; 52 case MIB_IF_TYPE_SLIP: 53 printf("│Type:SLIP "); 54 break; 55 default: 56 break; 57 } 58 59 printf("│MAC:"); 60 61 for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++) 62 { 63 if (i < pIpAdapterInfo->AddressLength - 1) 64 { 65 printf("%02X:", pIpAdapterInfo->Address[i]); 66 } 67 else 68 { 69 printf("%02X ", pIpAdapterInfo->Address[i]); 70 } 71 } 72 //可能网卡有多IP,因此通过循环去判断 73 IP_ADDR_STRING *pIpAddrString = &(pIpAdapterInfo->IpAddressList); 74 do 75 { 76 printf("│IP:%s ", pIpAddrString->IpAddress.String); 77 printf("│MASK:%s ", pIpAddrString->IpMask.String); 78 printf("│Gate:%s ", pIpAdapterInfo->GatewayList.IpAddress.String); 79 pIpAddrString = pIpAddrString->Next; 80 } while (pIpAddrString); 81 pIpAdapterInfo = pIpAdapterInfo->Next; 82 printf("└──────────────────────────┘ "); 83 } 84 } 85 //释放内存空间 86 if (pIpAdapterInfo) 87 { 88 delete pIpAdapterInfo; 89 } 90 getchar(); 91 return 0; 92 }
运行:
例子二:
1 // MacAddress.cpp : Defines the entry point for the console application. 2 // 3 4 5 #include <windows.h> 6 #include <wincon.h> 7 #include <stdlib.h> 8 #include <stdio.h> 9 #include <time.h> 10 #include <Nb30.h> 11 #pragma comment(lib,"netapi32.lib") 12 13 int GetMac(char * mac) 14 { 15 NCB ncb; 16 typedef struct _ASTAT_ 17 { 18 ADAPTER_STATUS adapt; 19 NAME_BUFFER NameBuff[30]; 20 }ASTAT, *PASTAT; 21 22 ASTAT Adapter; 23 24 typedef struct _LANA_ENUM 25 { 26 UCHAR length; 27 UCHAR lana[MAX_LANA]; 28 }LANA_ENUM; 29 30 LANA_ENUM lana_enum; 31 UCHAR uRetCode; 32 memset(&ncb, 0, sizeof(ncb)); 33 memset(&lana_enum, 0, sizeof(lana_enum)); 34 ncb.ncb_command = NCBENUM; 35 ncb.ncb_buffer = (unsigned char *)&lana_enum; 36 ncb.ncb_length = sizeof(LANA_ENUM); 37 uRetCode = Netbios(&ncb); 38 39 if (uRetCode != NRC_GOODRET) 40 return uRetCode; 41 42 for (int lana = 0; lana<lana_enum.length; lana++) 43 { 44 ncb.ncb_command = NCBRESET; 45 ncb.ncb_lana_num = lana_enum.lana[lana]; 46 uRetCode = Netbios(&ncb); 47 if (uRetCode == NRC_GOODRET) 48 break; 49 } 50 51 if (uRetCode != NRC_GOODRET) 52 return uRetCode; 53 54 memset(&ncb, 0, sizeof(ncb)); 55 ncb.ncb_command = NCBASTAT; 56 ncb.ncb_lana_num = lana_enum.lana[0]; 57 strcpy((char*)ncb.ncb_callname, "*"); 58 ncb.ncb_buffer = (unsigned char *)&Adapter; 59 ncb.ncb_length = sizeof(Adapter); 60 uRetCode = Netbios(&ncb); 61 62 if (uRetCode != NRC_GOODRET) 63 return uRetCode; 64 65 sprintf(mac, "%02X-%02X-%02X-%02X-%02X-%02X", 66 Adapter.adapt.adapter_address[0], 67 Adapter.adapt.adapter_address[1], 68 Adapter.adapt.adapter_address[2], 69 Adapter.adapt.adapter_address[3], 70 Adapter.adapt.adapter_address[4], 71 Adapter.adapt.adapter_address[5]); 72 73 return 0; 74 } 75 76 77 int main(int argc, char* argv[]) 78 { 79 char mac[18]; 80 GetMac(mac); 81 printf("The Mac Address is : %s ", mac); 82 83 system("pause"); 84 return 0; 85 }
运行:
谢谢.