#include <sys/ioctl.h> int ioctl(int d, int request, ...); /* Socket configuration controls. */ #define SIOCGIFADDR 0x8915 /* get PA address */ #define SIOCSIFADDR 0x8916 /* set PA address */ #define SIOCGIFHWADDR 0x8927 /* Get hardware address */ struct ifreq,Interface request structure,在头文件<net/if.h> #include <stdio.h> #include <unistd.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> #include <sys/ioctl.h> #include <net/if.h> int main() { int sock; int res; struct ifreq ifr; sock = socket(AF_INET, SOCK_STREAM, 0); strcpy(ifr.ifr_name, "eth0"); res = ioctl(sock, SIOCGIFADDR, &ifr); printf("IP: %s\n",inet_ntoa(((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr)); strcpy(ifr.ifr_name, "eth0"); res = ioctl(sock, SIOCGIFHWADDR, &ifr); int i; char mac[32]; for(i = 0; i < 6; ++i) { sprintf(mac + 3*i, "%02x:", (unsigned char)ifr.ifr_hwaddr.sa_data[i]); } printf("MAC: %s\n",mac); return 0; }