美文网首页OC资料
iOS开发中获取MAC地址方法

iOS开发中获取MAC地址方法

作者: 逐步腾飞 | 来源:发表于2016-03-25 16:26 被阅读8170次

既然你来这里,就知道要干啥了,直接上码:
获取iOS中的MAC地址:

- (NSString *)getMacAddress {
    int mib[6];
    size_t len;
    char *buf;
    unsigned char *ptr;
    struct if_msghdr *ifm;
    struct sockaddr_dl *sdl;

    mib[0] = CTL_NET;
    mib[1] = AF_ROUTE;
    mib[2] = 0;
    mib[3] = AF_LINK;
    mib[4] = NET_RT_IFLIST;

    if ((mib[5] = if_nametoindex("en0")) == 0) {
        printf("Error: if_nametoindex error/n");
        return NULL;
    }

    if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
        printf("Error: sysctl, take 1/n");
        return NULL;
    }

    if ((buf = malloc(len)) == NULL) {
        printf("Could not allocate memory. error!/n");
        return NULL;
    }

    if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
        free(buf);
        printf("Error: sysctl, take 2");
        return NULL;
    }

    ifm = (struct if_msghdr *)buf;
    sdl = (struct sockaddr_dl *)(ifm + 1);
    ptr = (unsigned char *)LLADDR(sdl);

    // MAC地址带冒号
    // NSString *outstring = [NSString stringWithFormat:@"%02x:%02x:%02x:%02x:%02x:%02x", *ptr, *(ptr+1), *(ptr+2),
    // *(ptr+3), *(ptr+4), *(ptr+5)];

    // MAC地址不带冒号
    NSString *outstring = [NSString
        stringWithFormat:@"%02x%02x%02x%02x%02x%02x", *ptr, *(ptr + 1), *(ptr + 2), *(ptr + 3), *(ptr + 4), *(ptr + 5)];

    free(buf);

    return [outstring uppercaseString];
}

相关文章

网友评论

  • JoeTong:方法中 CTL_NET、sysctl报错,怎么搞?
  • CherishSunshine:获取到的Mac地址中0,但是不显示,咋整?
  • 無漾:请问现在的iOS10要怎么去获取呢?
    無漾:@v尽栗而为v 网上查资料说,苹果禁止了获取mac地址,退而求其次去获取UUID了
    v尽栗而为v:同求,你写出来没? 我的扣扣号 308523527
  • __Lex:不说iOS7以后获取不到么
    4063e06c8c69:@li大鹏 是的
    li大鹏:@神秀 是获取不到了是吧
    4063e06c8c69:@尼古拉斯_凯陈 没用的

本文标题:iOS开发中获取MAC地址方法

本文链接:https://www.haomeiwen.com/subject/iccdlttx.html