• <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

            路漫漫,長(zhǎng)修遠(yuǎn),我們不能沒(méi)有錢
            隨筆 - 173, 文章 - 0, 評(píng)論 - 257, 引用 - 0
            數(shù)據(jù)加載中……

            linux 和 windows下 獲取主機(jī)網(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 

            調(diào)用方式

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



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

            久久一区二区三区99| 97久久精品无码一区二区| 久久精品无码免费不卡| 中文字幕无码久久人妻| 久久国产精品一国产精品金尊| 久久精品九九亚洲精品天堂| 国产高清美女一级a毛片久久w| 久久久久久久久久久久久久| 91精品国产色综合久久| 亚洲精品tv久久久久久久久久| 国产精品99精品久久免费| 久久精品无码一区二区日韩AV| 久久精品国产亚洲av麻豆色欲| 久久伊人五月天论坛| 久久精品视频免费| 久久永久免费人妻精品下载| 久久国产精品免费一区| 国产一区二区三区久久| 久久精品卫校国产小美女| 久久精品国产精品亚洲| AV狠狠色丁香婷婷综合久久| 久久亚洲sm情趣捆绑调教| 久久久久免费视频| 99久久婷婷国产一区二区| 国内精品久久久久久久97牛牛| 亚洲国产成人精品无码久久久久久综合 | 久久久久久久久久久久中文字幕 | 亚洲精品成人久久久| 亚洲国产精品一区二区久久| 久久男人Av资源网站无码软件| 久久综合偷偷噜噜噜色| 久久久久久亚洲精品无码| 国产精品丝袜久久久久久不卡| 99久久综合狠狠综合久久| 国产Av激情久久无码天堂| 国内精品九九久久久精品| 国内精品久久久久影院日本| 国内精品久久久久久99蜜桃| 99久久无色码中文字幕| 99久久国产综合精品网成人影院| 国产福利电影一区二区三区久久久久成人精品综合 |