#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"