通过IOCTL获得网口MAC地址
#include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <netinet/in.h> #include <net/if.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #define ETH_ADDR_LEN 6 int main(int argc, char ** argv) { unsigned char mac[ETH_ADDR_LEN]; int fd; struct ifreq ifr; if(argc != 2) { printf("Usage: %s <ifname>/n", argv[0]); exit(1); } if((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { perror("socket"); exit(1); } ifr.ifr_addr.sa_family = AF_INET; strncpy(ifr.ifr_name, argv[1], IFNAMSIZ-1); if (ioctl(fd, SIOCGIFHWADDR, &ifr) != 0) { perror("SIOCGIFHWADDR"); close(fd); exit(1); } close(fd); memcpy((void*)mac, (void *)((struct sockaddr)ifr.ifr_hwaddr).sa_data, ETH_ADDR_LEN); printf("MAC address of %s: %02X:%02X:%02X:%02X:%02X:%02X/n", argv[1], mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); exit(0); }