ios获取设备的唯一标识mac address
原文连接: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相关推荐
- iOS获取设备的唯一标识的方法
各种获取设备唯一标识的方法介绍 一.UDID(Unique Device Identifier) UDID的全称是Unique Device Identifier,它就是苹果iOS设备的唯一识别码,它 ...
- iOS获取设备的唯一标识的方法总结以及最好的方法
各种获取设备唯一标识的方法介绍 一.UDID(Unique Device Identifier) UDID的全称是Unique Device Identifier,它就是苹果iOS设备的唯一识别码,它 ...
- 【转载】设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识
设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识 原文地址:http://www.vonwei.com/post/UniqueDeviceIDfor ...
- uni-app获取设备的唯一标识
uni-app根据不同手机平台获取设备的唯一标识,由于获取的方式是异步的,当前页面执行不一定能拿到.建议存缓存,其他页面可以用调用缓存的方式获取,不存在的话在执行一下方法获取,确保保证一定能获取的到. ...
- 设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识
原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保 ...
- python获取机器唯一标识_开发中常用工具 - 获取设备的唯一标识、UDID、UUID、keychain保存UUID、判断网络...
UDID 全名:Unique Device Identifie(设备唯一标识符) 说明:UDID,即设备唯一标识符,这是除序列号之外每台iOS设备的独一无二的号码.UDID只是和设备相关的,是用来区分 ...
- plus获取软件相关信息,plus获取设备信息唯一标识
Android平台5+ API提前生效,支持在plusready事件前调用 ios上plus是一直存在的,不涉及等ready事件.但安卓上还是需要等plus ready. 在安卓环境中,通常情况下需要 ...
- js获取唯一设备码_HTML5+下用js获取设备的唯一识别码和本地数据库的操作
HTML5+下用js获取设备的唯一识别码和本地数据库的操作 发布时间:2018-04-24 12:01, 浏览次数:1111 , 标签: HTML js 首先获取设备的唯一标识,由于ios审核的阻挡, ...
- HTML5+下用js获取设备的唯一识别码和本地数据库的操作
首先获取设备的唯一标识,由于ios审核的阻挡,我现在只是获取它idfa来作为唯一识别码(这个会被重置,如果idfa不重要的话是可以考虑此方法的),Android就不用多说了 if(ua.match(/ ...
- iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?
http://www.ithao123.cn/content-8688001.html iOS获取设备唯一标识的各种方法?IDFA.IDFV.UDID分别是什么含义? [摘要:1.UDID (Uniq ...
最新文章
- Linux常用的Shell命令
- ubuntu下面搭建SolrCloud集群
- vue-cli 官方模板webpack-simple的npm run dev 与npm run bulid的一些问题
- 为nginx创建windows服务自启动
- mysql分页原理和sqlserver里面序列的用法
- rel=nofollow
- How Tomcat Works读书笔记之升级架构
- 查找恶意的TOR中继节点
- 服务器防御DDOS的办法
- ONEDNS配置2:centos7DNS服务器VA转发器配置
- Fibo Rule决策引擎应用实践
- Unity鼠标拖拽旋转拉远拉近场景
- 解决谷歌浏览器启动页面默认是搜狗浏览?
- 凌动z3735f运行64位linux,在z3735上装ubuntu,装完的经验
- 解决报错Cannot connect to the Maven process. Try again later. If the problem persists......
- Allegro PCB Designer 16.6打开brd文件空白的方法
- LaTex学习教程——插入图片及图片的引用
- 银行春招:六大行薪资待遇知多少?(上)
- Matlab图像的几何变换之图像缩放
- 继 Facebook 开源 PyTorch3D 后,谷歌开源 TensorFlow 3D 场景理解库
热门文章
- 关于mssql的学习体会,仅供参考!
- mysql concat 能否返回数字_关于Mysql中GROUP_CONCAT函数返回值长度的坑
- Wireshark实战分析之DHCP协议(二)
- 群论在计算机应用技术,群论在计算机全领域中应用.ppt
- 一次Linux驱动升级的问题记录
- orientation|keyboardHidden
- python怎么替换主干网络_无法将关键字“model”解析到字段中。活塞主干网.js
- 入门选手都能了解的聚类算法之二(DBSCAN)
- scala中class,object,trait的区别
- linux打开文件系统调用,Linux2.4打开一个文件的系统调用