Mac地址读取

获取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 }

运行:

谢谢.

原文地址:https://www.cnblogs.com/lumao1122-Milolu/p/11726081.html