美文网首页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以后获取不到么
        神秀:@li大鹏 是的
        li大鹏:@神秀 是获取不到了是吧
        神秀:@尼古拉斯_凯陈 没用的

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

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