获取设备UDID、IMEI、ICCID、序列号、Mac地址等信息

在iOS7之前, 可以方便的使用 [[UIDevice currentDevice] uniqueIdentifier] 来获取设备的UDID,但是在iOS7之后这个方法不再适用。

你可以用[[UIDevicecurrentDevice]valueForKey:@"uniqueIdentifier"];来获取到一个值,但这个值在iOS7中已经变成了FFFFFF+IDFV的值,显然,这个值并不能唯一标识设备。

再谈一谈IMEI,这个值好像在5.0的sdk中就不见了,私有库Message.framework的MFNetworkController.h中去掉了这个方法。

本以为iOS7及以上系统无法再获取到这些值,但看看别人Cydia,不是取得好好的吗?参考了一下Cydia的源码:

MobileCydia.mm

可以看到它使用了libMobileGestalt.dylib这个动态库,下面说一说具体如何操作。

1、导入libMobileGestalt.dylib库

2、加入声明

[objc] view plaincopyprint?

  1. OBJC_EXTERNCFStringRef MGCopyAnswer(CFStringRef key) WEAK_IMPORT_ATTRIBUTE;

3、使用如下方法获取

[objc] view plaincopyprint?

  1. CFStringRef UDID = MGCopyAnswer(CFSTR("UniqueDeviceID"));
  2. CFStringRef IMEI =MGCopyAnswer(CFSTR("InternationalMobileEquipmentIdentity"));
  3. CFStringRefserialNumber = MGCopyAnswer(CFSTR("SerialNumber"));

[objc] view plaincopyprint?

  1. CFArrayRef ICCIDArray =MGCopyAnswer(CFSTR("CarrierBundleInfoArray"));
  2. CFDictionaryRef ICCIDDic =CFArrayGetValueAtIndex(ICCIDArray, 0);
  3. CFStringRef ICCID  =CFDictionaryGetValue(ICCIDDic, CFSTR("IntegratedCircuitCardIdentity"));

[objc] view plaincopyprint?

  1. CFStringRefwifiAddress = MGCopyAnswer(CFSTR("WifiAddress"));
  2. CFStringRefbluetoothAddress = MGCopyAnswer(CFSTR("BluetoothAddress"));
  3. CFStringRefCPUArchitecture = MGCopyAnswer(CFSTR("CPUArchitecture"));
  4. CFStringRefproductType = MGCopyAnswer(CFSTR("ProductType"));
  5. CFTypeRefairplaneMode = MGCopyAnswer(CFSTR("AirplaneMode"));
  6. if (airplaneMode ==kCFBooleanTrue) { ... }

4、经过测试发现这些方法在iOS7以下不用越狱就能取到、在iOS7中需要越狱并创建xxx.entitlements文件,添加如下权限

5、在BuildSettings的Code SigningEntitlements中添加刚才创建的文件xxx.entitlements

6、编译运行

7、附上demo工程

http://download.csdn.net/detail/ookcode/8247495

8、我的环境

Xcode 6.1

iOS 8.1 SDK

OS X 10.9.5

时间: 2024-11-05 12:30:42

获取设备UDID、IMEI、ICCID、序列号、Mac地址等信息的相关文章

unity基础开发----Unity获取PC,Ios系统的mac地址等信息

在软件开发中可以会用到mac地址作为,设备的唯一标示,我们也可以通过unity获取,经测试pc,ios都可以但是安卓没有获取到. 代码如下: using UnityEngine; using System.Collections; using System.Net.NetworkInformation; public class NetWorkInfo : MonoBehaviour { void Start() { Debug.Log(GetMacAddress()); } public st

获得Unix/Linux系统中的IP、MAC地址等信息

获得Unix/Linux系统中的IP.MAC地址等信息 中高级  |  2010-07-13 16:03  |  分类:①C语言. Unix/Linux. 网络编程 ②手册  |  4,471 次阅读 作者:diaoyf  |  文章来源:http://programmerdigest.cn 实际环境和特殊需求往往会将简单问题复杂化,比如计算机IP地址,对于一个连接中socket,可以直接获得本端和对端的IP.端口信息.但在一些特殊场合我们可能需要更多的信息,比如系统中有几块网卡,他们的Mac地

Java获取操作系统的本机ip和Mac地址

获取局域网ip和mac(如果电脑没有直接连接外网),否则获取公网ip 通过第三放获取公网ip package org.twt.zipjar.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.Inet4Address; import java.net.InetAdd

iOS开发——获取手机当前WiFi名和MAC地址

获取手机WiFi信息. iOS9以前的方法,还是能用,警告就警告吧!iOS9以后使用的是苹果最新的API框架,NetworkExtension/NEHotspotHelper.h,这个框架,第一次开放了它的虚拟网卡,有时间了再介绍. #import <SystemConfiguration/CaptiveNetwork.h> - (void)viewDidLoad { [super viewDidLoad]; NSDictionary *dict = [self SSIDInfo]; NSLo

[记]Linux 获取本机(全部)IP、MAC地址方法 (C/C++)

Linux 获取本机IP.MAC地址用法大全 1 2 //#include <sys/types.h> 3 #include <ifaddrs.h> 4 #include <sys/ioctl.h> 5 #include <net/if.h> 6 #include <string.h> 7 #include <stdio.h> 8 #include <unistd.h> 9 #include <netdb.h>

Java获取本机的IP与MAC地址

有些机器有许多虚拟的网卡,获取IP地址时会出现一些意外,所以需要一些验证: 1 // 获取mac地址 2 public static String getMacAddress() { 3 try { 4 Enumeration<NetworkInterface> allNetInterfaces = NetworkInterface.getNetworkInterfaces(); 5 byte[] mac = null; 6 while (allNetInterfaces.hasMoreEle

(转)通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号

最近由于项目的需要,需要在程序中获取机器的硬盘序列号和MAC地址等信息,在C#下,可以很容易的获得这些信息,但是在C++程序中感觉比较麻烦.经过百度,发现很多大虾都是通过WMI来获取这些硬件信息的,网上也有相关的代码,通过实际调试,也发现确实可以通过WMI来获取这些信息.前两天,在网上突然搜到一位大牛写的比较完整的程序,为了以后使用方便,就转载记录一下.同时,也会在大牛的代码中增加一些自己的注释,都是自己在实际使用过程中遇到的问题. #define _WIN32_DCOM #include "s

iOS 蓝牙获取MAC地址

援引:http://www.jianshu.com/p/1d6a8fc8134f iOS要获取蓝牙设备的MAC地址有两种:一是硬件工程师开通的服务特征下有MAC的信息,我们就从通道中获取:二是硬件工程师在扫描中设备信息中放置MAC信息,我们从有RSSI的函数中获取 1.形如你所在其他网站上看到的在某写板子模块上的服务如:"A180"的,其下均有获取到MAC的特征.此处我们略过,因为其他地方说的很清楚了,援引处也有.需要硬件配和加入服务特征. 2.就是在有RSSI的函数中获取. 首先先让

C#获取MAC地址的几种方法

首先需要用到的一些方法和类: public enum NCBCONST { NCBNAMSZ = 16, MAX_LANA = 254, NCBENUM = 0x37, NRC_GOODRET = 0x00, NCBRESET = 0x32, NCBASTAT = 0x33, NUM_NAMEBUF = 30, } [StructLayout(LayoutKind.Sequential)] public struct ADAPTER_STATUS { [MarshalAs(UnmanagedTy