zoukankan      html  css  js  c++  java
  • C++获取hostname&IP&MAC地址

     获取mac地址

    #include <ifaddrs.h>
    #include <sys/ioctl.h> 
    #include <net/if.h> 
    #include <string.h> 
    #include <stdio.h>
    #include <unistd.h>
    #include <netdb.h>
    #include <arpa/inet.h>
    
    char* getMac(char* mac,char* dv){
        struct   ifreq   ifreq; 
        int   sock; 
        if(!mac || !dv)
            return mac;
        if((sock=socket(AF_INET,SOCK_STREAM,0)) <0) {
            perror( "socket "); 
            return mac; 
        } 
        strcpy(ifreq.ifr_name,dv); 
        if(ioctl(sock,SIOCGIFHWADDR,&ifreq) <0) { 
            perror( "ioctl "); 
            return mac; 
        } close(sock);
         sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x", 
                (unsigned char)ifreq.ifr_hwaddr.sa_data[0], 
                (unsigned char)ifreq.ifr_hwaddr.sa_data[1], 
                (unsigned char)ifreq.ifr_hwaddr.sa_data[2], 
                (unsigned char)ifreq.ifr_hwaddr.sa_data[3], 
                (unsigned char)ifreq.ifr_hwaddr.sa_data[4], 
                (unsigned char)ifreq.ifr_hwaddr.sa_data[5]);
         return mac;
     }
     
    int main (int argc, const char * argv[])
    {
        char hname[128];
        struct hostent *hent;
        int i;
     
        gethostname(hname, sizeof(hname));
     
        //hent = gethostent();
        hent = gethostbyname(hname);
     
        printf("
    
    
    ");
     
        char mac[30];
        struct ifaddrs * ifAddrStruct=NULL;
        void * tmpAddrPtr=NULL;
     
        getifaddrs(&ifAddrStruct);
     
        while (ifAddrStruct!=NULL) {
            if (ifAddrStruct->ifa_addr->sa_family==AF_INET) { // check it is IP4
                // is a valid IP4 Address
                tmpAddrPtr=&((struct sockaddr_in *)ifAddrStruct->ifa_addr)->sin_addr;
                char addressBuffer[INET_ADDRSTRLEN];
                inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
                printf("%s IP: %s
    ", ifAddrStruct->ifa_name, addressBuffer);
                printf("MAC: %s
    
    ",getMac(mac,ifAddrStruct->ifa_name));
            } else if (ifAddrStruct->ifa_addr->sa_family==AF_INET6) { // check it is IP6
                // is a valid IP6 Address
                tmpAddrPtr=&((struct sockaddr_in *)ifAddrStruct->ifa_addr)->sin_addr;
                char addressBuffer[INET6_ADDRSTRLEN];
                inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);
                printf("%s IP: %s
    ", ifAddrStruct->ifa_name, addressBuffer); 
                printf("MAC: %s
    
    ",getMac(mac,ifAddrStruct->ifa_name));
            } 
            ifAddrStruct=ifAddrStruct->ifa_next;
        }
        return 0;
    } 
  • 相关阅读:
    TypeScript中处理大数字(会丢失后面部分数字)
    多行字符串换行符(`) + 模板字符串
    ES6 阮一峰阅读学习
    ms转成00:00:00的时间格式化
    android侧滑效果,SlidingMenu配置
    Android Developers:按需求加载视图
    Python测试代理ip是否有效
    JavaScript去除数组中重复的数字
    Python连接redis
    [已解决]报错: Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
  • 原文地址:https://www.cnblogs.com/cfox/p/12796425.html
Copyright © 2011-2022 走看看