• ioctl获取本机IP和MAC地址


    #include <net/if.h>
    #include <sys/ioctl.h>
    #include <arpa/inet.h>
    #include <stdlib.h>
    #include <stdio.h>
     
    #define ETH_NAME    "ens33"
     
    int main()
    {
        int                    sockfd;
        struct sockaddr_in    sin;
        struct ifreq        ifr;
        unsigned char        mac[6];
        
        sockfd = socket(AF_INET, SOCK_DGRAM, 0);
        if (sockfd == -1) {
            perror("socket error");
            exit(1);
        }
        
        strncpy(ifr.ifr_name, ETH_NAME, IFNAMSIZ);        //Interface name
        
        if (ioctl(sockfd, SIOCGIFADDR, &ifr) == 0) {    //SIOCGIFADDR 获取interface address
            memcpy(&sin, &ifr.ifr_addr, sizeof(ifr.ifr_addr));
            printf("ip:  %s
    ", inet_ntoa(sin.sin_addr));
        }
        
        if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) == 0) {    //SIOCGIFHWADDR 获取hardware address
            memcpy(mac, ifr.ifr_hwaddr.sa_data, 6);
            printf("mac: %02x:%02x:%02x:%02x:%02x:%02x
    ", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
        }
        
        return 0;
    }
    请注意修改本机网卡名称  #define ETH_NAME    "ens33"
  • 相关阅读:
    python深浅copy探究
    构建squid代理服务器
    python列表和元组操作
    python字符串操作
    Apache虚拟主机
    Apache访问控制
    部署AWStats分析系统
    LAMP平台部署
    二分查找
    设计模式六大原则
  • 原文地址:https://www.cnblogs.com/Malphite/p/13968263.html
Copyright © 2020-2023  润新知