• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

            路漫漫,長修遠,我們不能沒有錢
            隨筆 - 173, 文章 - 0, 評論 - 257, 引用 - 0
            數(shù)據(jù)加載中……

            linux 和 windows下 獲取主機網(wǎng)卡mac地址

              1 #ifndef __EHTERNET_HPP__
              2 #define __EHTERNET_HPP__
              3 
              4 #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
              5 #define MY_WIN32
              6 #elif defined(linux) || defined(__linux) || defined(__linux__)
              7 #define MY_LINUX
              8 #endif
              9 
             10 #include<string>
             11 
             12 #if defined(MY_WIN32)
             13 #include <winsock2.h>
             14 #include <iphlpapi.h>
             15 #endif
             16 
             17 #if defined(MY_LINUX)
             18 #include <sys/socket.h>
             19 //#include <linux/if.h>
             20 //#include <net/if.h>
             21 #include <sys/ioctl.h>
             22 #endif
             23 
             24 #if defined(MY_WIN32)
             25 std::string operstatusToStr(IF_OPER_STATUS status){
             26     switch(status){
             27     case IfOperStatusUp:
             28         return "up";
             29     case IfOperStatusDown:
             30         return "down";
             31     case IfOperStatusTesting:
             32         return "testing";
             33     case IfOperStatusUnknown:
             34         return "unknown";
             35     case IfOperStatusDormant:
             36         return "dormant";
             37     case IfOperStatusNotPresent:
             38         return "notPresent";
             39     case IfOperStatusLowerLayerDown:
             40         return "sLowerLayerDown";
             41     }
             42     return "unknown";
             43 }
             44 
             45 bool GetMacByGetAdaptersAddresses(std::string& macOUT, bool all = false) {
             46     bool ret = false;
             47 
             48     ULONG family = AF_UNSPEC;//返回包括 IPV4 和 IPV6 地址
             49     ULONG flags = GAA_FLAG_INCLUDE_PREFIX | GAA_FLAG_INCLUDE_GATEWAYS;//包括 IPV4 ,IPV6 閘道器
             50     ULONG outBufLen = sizeof(IP_ADAPTER_ADDRESSES) * 1;
             51     PIP_ADAPTER_ADDRESSES pAddresses = NULL;
             52 
             53     PIP_ADAPTER_ADDRESSES pCurrAddresses = NULL;
             54 
             55     DWORD dwRetVal = 0;
             56     do {
             57         pAddresses = (IP_ADAPTER_ADDRESSES *)malloc(outBufLen);
             58         if (pAddresses == NULL)
             59             return ret;
             60         dwRetVal = GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen);
             61         if (dwRetVal == ERROR_BUFFER_OVERFLOW) {
             62             free(pAddresses);
             63             pAddresses = NULL;
             64         } else {
             65             break;
             66         }
             67     } while (dwRetVal == ERROR_BUFFER_OVERFLOW);
             68 
             69     if (dwRetVal == NO_ERROR) {
             70         pCurrAddresses = pAddresses;
             71         while (pCurrAddresses) {
             72             if (pCurrAddresses->PhysicalAddressLength != 0) {
             73                 if(all || pCurrAddresses->OperStatus == IfOperStatusUp){
             74                     char type[8= {0};
             75                     switch (pCurrAddresses->IfType){ //網(wǎng)卡類型
             76                     case MIB_IF_TYPE_ETHERNET:
             77                         sprintf(type, "eth");
             78                         break;
             79                     case MIB_IF_TYPE_PPP:
             80                         sprintf(type, "ppp");
             81                         break;
             82                     case MIB_IF_TYPE_LOOPBACK:
             83                         sprintf(type, "loop");
             84                         break;
             85                     case MIB_IF_TYPE_SLIP:
             86                         sprintf(type, "atm");
             87                         break;
             88                     case IF_TYPE_IEEE80211:
             89                         sprintf(type, "wifi");
             90                         break;
             91                     }
             92 
             93                     char acMAC[32];
             94                     sprintf(acMAC, "%02X%02X%02X%02X%02X%02X", (unsigned char)(pCurrAddresses->PhysicalAddress[0]), (unsigned char)(pCurrAddresses->PhysicalAddress[1]),
             95                             (unsigned char)(pCurrAddresses->PhysicalAddress[2]), (unsigned char)(pCurrAddresses->PhysicalAddress[3]),
             96                             (unsigned char)(pCurrAddresses->PhysicalAddress[4]), (unsigned char)(pCurrAddresses->PhysicalAddress[5]));
             97                     macOUT = macOUT + acMAC + '\n';
             98                 }
             99             }
            100 
            101 
            102             pCurrAddresses = pCurrAddresses->Next;
            103         }
            104         ret = true;
            105     } else {
            106 
            107     }
            108 
            109     if (pAddresses) free(pAddresses);
            110     return ret;
            111 }
            112 #endif
            113 
            114 #if defined(MY_LINUX)
            115 bool GetMacByGetAdaptersAddresses(std::string& macOUT, bool all = false){
            116     int sock, if_count, i;
            117     struct ifconf ifc;
            118     struct ifreq ifr[10];
            119     char mac[32];
            120 
            121     memset(&ifc, 0sizeof(struct ifconf));
            122     sock = socket(AF_INET, SOCK_DGRAM, 0);
            123 
            124     ifc.ifc_len = 10 * sizeof(struct ifreq);
            125     ifc.ifc_buf = (char *)ifr;
            126 
            127     //獲取所有網(wǎng)卡信息
            128     ioctl(sock, SIOCGIFCONF, (char *)&ifc);
            129     if_count = ifc.ifc_len / (sizeof(struct ifreq));
            130     for (i = 0; i < if_count; i++) {
            131         if (ioctl(sock, SIOCGIFHWADDR, &ifr[i]) == 0) {
            132             if(all || (ifr[i].ifr_flags & IFF_RUNNING) ){
            133                 memcpy(mac, ifr[i].ifr_hwaddr.sa_data, 6);
            134                 sprintf(mac, "%02X%02X%02X%02X%02X%02X", (unsigned char)(mac[0]), (unsigned char)(mac[1]), (unsigned char)(mac[2]),
            135                         (unsigned char)(mac[3]), (unsigned char)(mac[4]), (unsigned char)(mac[5]));
            136                 macOUT = macOUT + mac + '\n';
            137 //                printf("eth: %s, mac: %02x:%02x:%02x:%02x:%02x:%02x\n", ifr[i].ifr_name, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
            138             }
            139         }
            140     }
            141     return true;
            142 }
            143 #endif
            144 
            145 #endif
            146 
            147 

            調用方式

                std::string macs;
                GetMacByGetAdaptersAddresses(macs, true);
                qDebug() << TIMESTAMP << macs.c_str();



            posted on 2021-06-03 17:42 Khan 閱讀(934) 評論(0)  編輯 收藏 引用 所屬分類: GCC/G++跨平臺開發(fā)

            人妻精品久久无码专区精东影业| 成人久久综合网| 久久青草国产精品一区| 亚洲精品乱码久久久久久蜜桃图片| 久久99久久成人免费播放| 国产亚洲色婷婷久久99精品| 97精品依人久久久大香线蕉97| 久久精品一区二区影院| 久久久精品波多野结衣| 国产精品美女久久久久AV福利| 久久亚洲精品中文字幕三区| 久久精品人人做人人妻人人玩| 亚洲狠狠婷婷综合久久蜜芽| 2021最新久久久视精品爱| 欧美日韩精品久久久免费观看| 香蕉久久AⅤ一区二区三区| 久久精品国产亚洲Aⅴ香蕉| 久久综合九色综合欧美狠狠| 国产精品激情综合久久| 久久久WWW免费人成精品| 欧美激情精品久久久久久| 中文字幕精品久久久久人妻| 性做久久久久久久久浪潮| 国内精品久久久久影院薰衣草| 99久久做夜夜爱天天做精品| 久久天天躁狠狠躁夜夜96流白浆| 精品久久久久久久无码 | 国产亚洲精品美女久久久| 久久久久久久久无码精品亚洲日韩| 亚洲色大成网站www久久九| 69久久精品无码一区二区| 精品国产乱码久久久久久浪潮| 日本加勒比久久精品| 欧美黑人又粗又大久久久| 亚洲成人精品久久| 久久99国产精品久久99小说| 国产成人久久精品一区二区三区| 国产高清美女一级a毛片久久w| 欧美精品乱码99久久蜜桃| 久久久久久综合一区中文字幕 | 国产精品无码久久综合|