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"
原文地址:https://www.cnblogs.com/Malphite/p/13968263.html