原文连接:http://blog.csdn.net/sakulafly/article/details/12197545

作者:sakulafly

很多时候我们都需要唯一来确定一台设备,苹果设备本来有个UDID号,可以实现这个目的。在iOS5.0以前,还有一个uniqueIdentifier的API用来获得这个number。不过iOS5之后,这个API废除了。

一条路不通,我们就换一条路走,于是MAC地址就成了一个不错的选择,苹果没有提供获得MAC地址的API,不过使用sysctl还是可以有点办法的,代码如下:

#include <sys/types.h>

#include <sys/param.h>

#include <sys/ioctl.h>

#include <sys/socket.h>

#include <net/if.h>

#include <netinet/in.h>

#include <net/if_dl.h>

#include <sys/sysctl.h>

void GetMACAddress(unsigned char *mac)

{

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 ;

}

if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {

printf("Error: sysctl, take 1/n");

return ;

}

if ((buf = malloc(len)) == NULL) {

printf("Could not allocate memory. error!/n");

return ;

}

if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {

printf("Error: sysctl, take 2");

free(buf);

return ;

}

ifm = (struct if_msghdr *)buf;

sdl = (struct sockaddr_dl *)(ifm + 1);

ptr = (unsigned char *)LLADDR(sdl);

memcpy(mac,ptr, 6);

free(buf);

}

这段代码可以良好的工作,直到iOS7的出现。不知出于什么原因,苹果对于sysctl和ioctl进行了技术处理,让MAC地址返回02:00:00:00:00:00。官方文档上这样写的“Twolow-level networking APIs that used to return a MAC address now return thefixed value 02:00:00:00:00:00. The APIs in question are sysctl(NET_RT_IFLIST) andioctl(SIOCGIFCONF). Developers using the value of the MAC address should migrate toidentifiers such as -[UIDeviceidentifierForVendor].This change affects all apps running on iOS 7”

ios获取设备的唯一标识mac address相关推荐

  1. iOS获取设备的唯一标识的方法

    各种获取设备唯一标识的方法介绍 一.UDID(Unique Device Identifier) UDID的全称是Unique Device Identifier,它就是苹果iOS设备的唯一识别码,它 ...

  2. iOS获取设备的唯一标识的方法总结以及最好的方法

    各种获取设备唯一标识的方法介绍 一.UDID(Unique Device Identifier) UDID的全称是Unique Device Identifier,它就是苹果iOS设备的唯一识别码,它 ...

  3. 【转载】设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识

    设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识 原文地址:http://www.vonwei.com/post/UniqueDeviceIDfor ...

  4. uni-app获取设备的唯一标识

    uni-app根据不同手机平台获取设备的唯一标识,由于获取的方式是异步的,当前页面执行不一定能拿到.建议存缓存,其他页面可以用调用缓存的方式获取,不存在的话在执行一下方法获取,确保保证一定能获取的到. ...

  5. 设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识

    原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保 ...

  6. python获取机器唯一标识_开发中常用工具 - 获取设备的唯一标识、UDID、UUID、keychain保存UUID、判断网络...

    UDID 全名:Unique Device Identifie(设备唯一标识符) 说明:UDID,即设备唯一标识符,这是除序列号之外每台iOS设备的独一无二的号码.UDID只是和设备相关的,是用来区分 ...

  7. plus获取软件相关信息,plus获取设备信息唯一标识

    Android平台5+ API提前生效,支持在plusready事件前调用 ios上plus是一直存在的,不涉及等ready事件.但安卓上还是需要等plus ready. 在安卓环境中,通常情况下需要 ...

  8. js获取唯一设备码_HTML5+下用js获取设备的唯一识别码和本地数据库的操作

    HTML5+下用js获取设备的唯一识别码和本地数据库的操作 发布时间:2018-04-24 12:01, 浏览次数:1111 , 标签: HTML js 首先获取设备的唯一标识,由于ios审核的阻挡, ...

  9. HTML5+下用js获取设备的唯一识别码和本地数据库的操作

    首先获取设备的唯一标识,由于ios审核的阻挡,我现在只是获取它idfa来作为唯一识别码(这个会被重置,如果idfa不重要的话是可以考虑此方法的),Android就不用多说了 if(ua.match(/ ...

  10. iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?

    http://www.ithao123.cn/content-8688001.html iOS获取设备唯一标识的各种方法?IDFA.IDFV.UDID分别是什么含义? [摘要:1.UDID (Uniq ...

最新文章

  1. Linux常用的Shell命令
  2. ubuntu下面搭建SolrCloud集群
  3. vue-cli 官方模板webpack-simple的npm run dev 与npm run bulid的一些问题
  4. 为nginx创建windows服务自启动
  5. mysql分页原理和sqlserver里面序列的用法
  6. rel=nofollow
  7. How Tomcat Works读书笔记之升级架构
  8. 查找恶意的TOR中继节点
  9. 服务器防御DDOS的办法
  10. ONEDNS配置2:centos7DNS服务器VA转发器配置
  11. Fibo Rule决策引擎应用实践
  12. Unity鼠标拖拽旋转拉远拉近场景
  13. 解决谷歌浏览器启动页面默认是搜狗浏览?
  14. 凌动z3735f运行64位linux,在z3735上装ubuntu,装完的经验
  15. 解决报错Cannot connect to the Maven process. Try again later. If the problem persists......
  16. Allegro PCB Designer 16.6打开brd文件空白的方法
  17. LaTex学习教程——插入图片及图片的引用
  18. 银行春招:六大行薪资待遇知多少?(上)
  19. Matlab图像的几何变换之图像缩放
  20. 继 Facebook 开源 PyTorch3D 后,谷歌开源 TensorFlow 3D 场景理解库

热门文章

  1. 关于mssql的学习体会,仅供参考!
  2. mysql concat 能否返回数字_关于Mysql中GROUP_CONCAT函数返回值长度的坑
  3. Wireshark实战分析之DHCP协议(二)
  4. 群论在计算机应用技术,群论在计算机全领域中应用.ppt
  5. 一次Linux驱动升级的问题记录
  6. orientation|keyboardHidden
  7. python怎么替换主干网络_无法将关键字“model”解析到字段中。活塞主干网.js
  8. 入门选手都能了解的聚类算法之二(DBSCAN)
  9. scala中class,object,trait的区别
  10. linux打开文件系统调用,Linux2.4打开一个文件的系统调用