zoukankan      html  css  js  c++  java
  • 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 }

    运行:

    谢谢.

  • 相关阅读:
    念奴娇·登多景楼
    转载《“精”、“气”、“神”解》
    三伏天,人体内有一个“冰箱”
    《抓住“三伏天”习武健身的黄金季节》--胡俭雷
    孙氏内家拳中的桩功
    清净布气门功夫介绍
    孙式太极拳的站桩功--无极式
    [Android Tips] 25. ADB Command Note
    [Python] 删除指定目录下后缀为 xxx 的过期文件
    [Git] Ubuntu 升级 git 版本
  • 原文地址:https://www.cnblogs.com/lumao1122-Milolu/p/11726081.html
Copyright © 2011-2022 走看看