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;}

原创粉丝点击