linux获取指定网口的MAC
来源:互联网 发布:什么精华液比较好知乎 编辑:程序博客网 时间:2024/05/17 04:20
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/ioctl.h>#include <sys/socket.h>#include <netinet/in.h>#include <net/if.h>#include <assert.h>int obtain_mac(const char *ifname, unsigned char *mac, int len){ int sk = -1, ret = 0; struct ifreq ifreq; assert(ifname); assert(mac); assert(len >= 6); sk = socket(AF_INET, SOCK_STREAM, 0); if (sk < 0) { perror("socket"); ret--; goto OUT; } strcpy(ifreq.ifr_name, ifname); if (ioctl(sk, SIOCGIFHWADDR, &ifreq) < 0) { perror("ioctl"); ret--; goto OUT; } memcpy(mac, (unsigned char *)ifreq.ifr_hwaddr.sa_data, 6);OUT: if (sk >= 0) close(sk); return ret;}int main(int argc, char **argv){ unsigned char mac[12]; if (obtain_mac(argv[1], mac, sizeof(mac)) < 0) return -1; printf("%02X:%02X:%02X:%02X:%02X:%02X\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5] ); return 0;}