`
siruoxian
  • 浏览: 238893 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

IOS IMEI 获取

 
阅读更多

好文章收藏一下

IOS IMEI 获取

//

//  network.h

//  AUOiWay_Mobile

//

//  Created by Mahmood1 on 2/21/12.

//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.

//

#import <UIKit/UIKit.h>

 

#define SUPPORTS_IOKIT_EXTENSIONS    1

 

/*

 * To use, you must add the (semi)public IOKit framework before compiling

 */

 

#if SUPPORTS_IOKIT_EXTENSIONS

@interface UIDevice (IOKit_Extensions)

- (NSString *) imei;

- (NSString *) serialnumber;

- (NSString *) backlightlevel;

- (NSString *) macaddress;

@end

#endif

 

 

//

//  network.m

//  AUOiWay_Mobile

//

//  Created by Mahmood1 on 2/21/12.

//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.

//

#import "network.h"

#include <sys/types.h>

#include <sys/sysctl.h>

#import <mach/mach_host.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <netdb.h>

#include <ifaddrs.h>

#include <sys/socket.h>

#include <net/if.h>

#include <net/if_dl.h>

#include <ifaddrs.h>

 

#if SUPPORTS_IOKIT_EXTENSIONS

#pragma mark IOKit miniheaders

 

#define kIODeviceTreePlane        "IODeviceTree"

 

enum {

    kIORegistryIterateRecursively    = 0x00000001,

    kIORegistryIterateParents        = 0x00000002

};

 

typedef mach_port_t    io_object_t;

typedef io_object_t    io_registry_entry_t;

typedef char        io_name_t[128];

typedef UInt32        IOOptionBits;

 

CFTypeRef

IORegistryEntrySearchCFProperty(

                                io_registry_entry_t    entry,

                                const io_name_t        plane,

                                CFStringRef        key,

                                CFAllocatorRef        allocator,

                                IOOptionBits        options );

 

kern_return_t

IOMasterPort( mach_port_t    bootstrapPort,

             mach_port_t *    masterPort );

 

io_registry_entry_t

IORegistryGetRootEntry(

                       mach_port_t    masterPort );

 

CFTypeRef

IORegistryEntrySearchCFProperty(

                                io_registry_entry_t    entry,

                                const io_name_t        plane,

                                CFStringRef        key,

                                CFAllocatorRef        allocator,

                                IOOptionBits        options );

 

kern_return_t   mach_port_deallocate

(ipc_space_t                               task,

 mach_port_name_t                          name);

 

 

@implementation UIDevice (IOKit_Extensions)

#pragma mark IOKit Utils

NSArray *getValue(NSString *iosearch)

{

    mach_port_t          masterPort;

    CFTypeID             propID = (CFTypeID) NULL;

    unsigned int         bufSize;

 

    kern_return_t kr = IOMasterPort(MACH_PORT_NULL, &masterPort);

    if (kr != noErr) return nil;

 

    io_registry_entry_t entry = IORegistryGetRootEntry(masterPort);

    if (entry == MACH_PORT_NULL) return nil;

 

    CFTypeRef prop = IORegistryEntrySearchCFProperty(entry,kIODeviceTreePlane, (CFStringRef) iosearch, nil,kIORegistryIterateRecursively);

    if (!prop) return nil;

 

    propID = CFGetTypeID(prop);

    if (!(propID == CFDataGetTypeID())) 

    {

        mach_port_deallocate(mach_task_self(), masterPort);

        return nil;

    }

 

    CFDataRef propData = (CFDataRef) prop;

    if (!propData) return nil;

 

    bufSize = CFDataGetLength(propData);

    if (!bufSize) return nil;

 

    //NSString *p1 = [[[NSString alloc] initWithBytes:CFDataGetBytePtr(propData) length:bufSize encoding:1] autorelease];

    NSString *p1 = [[[NSString alloc]initWithBytes:CFDataGetBytePtr(propData) length:bufSizeencoding:NSUTF8StringEncoding] autorelease];

    mach_port_deallocate(mach_task_self(), masterPort);

    return [p1 componentsSeparatedByString:@"/0"];

}

 

- (NSString *) imei

{

    NSArray *results = getValue(@"device-imei");

    if (results)

    {

        //return [results objectAtIndex:0];

        NSString *string_content = [results objectAtIndex:0];

        const char *char_content = [string_content UTF8String];

        return  [[NSString alloc] initWithCString:(constchar*)char_content  encoding:NSUTF8StringEncoding];

 

    }

    //if(results)

    //{

    //    return [(NSString *)[results objectAtIndex:0] substringToIndex:2];

   // }

    return @"";

}

 

- (NSString *) serialnumber

{

    NSArray *results = getValue(@"serial-number");

    if (results) return [results objectAtIndex:0];

    return nil;

}

 

- (NSString *) backlightlevel

{

    NSArray *results = getValue(@"backlight-level");

    if (results) return [results objectAtIndex:0];

    return nil;

}

 

- (NSString *) macaddress

{

    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) {

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

        return NULL;

    }

 

    ifm = (struct if_msghdr *)buf;

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

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

 

    NSString *outstring = [NSStringstringWithFormat:@"%02x%02x%02x%02x%02x%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];

    free(buf);

    return [outstring uppercaseString];

}

 

 

 

@end

#endif

分享到:
评论

相关推荐

    iOS7获取UDID、IMEI、SN、ICCID、Mac地址等信息

    在iOS系统中,UDID(Unique Device Identifier)是设备独一无二的标识符,IMEI(International Mobile Equipment Identity)是国际移动设备识别码,SN(Serial Number)是设备序列号,而ICCID(Integrated Circuit ...

    C# 获取IMEI即获取移动设备手机串号手机编码号源代码

    在C#编程环境中,如果你需要在Windows Phone、Android或iOS等平台上获取IMEI,你需要根据不同的平台实现不同的方法。本篇文章将详细讲解如何在C#中获取IMEI,主要针对Windows Phone和Android平台。 对于Windows ...

    ios获取imei

    在iOS 7及更高版本中,直接获取IMEI的方法已经被废弃,现在需要通过更复杂的方式才能获取到。 要获取IMEI,你需要在你的项目中引入`UIKit`和`IOKit`框架。`UIKit`主要用于UI交互,而`IOKit`则提供了一种方法来访问...

    Delphi跨平台(Win,Android,IOS)获取设备唯一标识符

    - `GetiOSDeviceIdentifier`: 用于获取iOS设备的唯一标识,可能包括IDFA、UUID等。 - `GetAndroidDeviceIdentifier`: 用于获取Android设备的唯一标识,可能使用ANDROID_ID或其他方式。 - `...

    获取手机IMEI号、手机型号等

    对于iOS系统,使用`UIDevice`类的`identifierForVendor`属性可以获取类似的唯一标识符,但请注意这并不等同于IMEI,因为苹果出于隐私考虑不提供直接获取IMEI的API。不过,在特定条件下,如通过诊断服务,可以间接...

    不同手机设备 获取IMEI

    ### 不同手机设备获取IMEI方法详解 #### 一、前言 国际移动设备身份(International Mobile Equipment Identity,简称IMEI)是每台移动电话所独有的编号,它可以帮助运营商识别和跟踪每一部设备,用于防盗和其他...

    在JNI中得到手机IMEI号

    #### JNI与IMEI获取 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言编写的代码进行交互,如C/C++。在Android开发中,JNI常被用来实现性能要求较高的部分或者调用特定平台的API,...

    Y.rar_IMEI_write imei

    3. 操作系统权限:了解如何在Android或iOS等系统中获取必要的权限。 4. 安全性:理解IMEI修改的潜在风险和法规限制。 5. 编程技能:掌握至少一种编程语言,并熟悉相关库或框架。 在实际操作中,务必注意遵循法律...

    获取设备唯一标识的例子

    然而,苹果自iOS 7开始限制了获取IMEI和UDID(唯一设备标识符)的行为,因为它们被认为侵犯用户隐私,所以现在不能直接获取IMEI,只能通过诊断接口在特定情况下访问。 在跨平台开发中,如使用React Native或Flutter...

    使用Objective-C获取IPHONE手机IMSI序列号

    在iOS开发中,有时我们需要获取设备的特定标识信息,例如IMSI(国际移动用户识别码)来识别手机的网络运营商或手机号。本文将详细介绍如何使用Objective-C编程语言获取iPhone的IMSI序列号,并通过该序列号获取运营商...

    获取手机唯一标识

    在Android开发中,获取手机的唯一标识是一个常见的需求,用于区分不同的设备,便于数据分析或个性化服务。Android系统提供了多种方式来获取设备的标识,但随着系统版本的更新和隐私保护政策的变化,这些方法的可用性...

    获得本机号码 运营商 手机标识 uuid device_id

    例如,Android的TelephonyManager类可以获取IMEI,而iOS则提供了UIDevice的identifierForVendor属性来获取device_id。 在实际操作中,开发人员需要注意以下几点: 1. **合规性**:获取和使用这些数据必须符合GDPR等...

    Unity3d获得android和ios设备的唯一标识-附件资源

    Unity3d获得android和ios设备的唯一标识-附件资源

    iphone手机获取device id即UDID的方法

    序列号下面是设备的IMEI(国际移动设备识别码),而IMEI下面就是你要找的UDID。UDID通常显示为一串较长的字母数字组合。 5. 获取UDID的关键步骤来了:由于UDID不是可选中的文本,你不能直接通过鼠标来选中它。但你...

    imei_plugin_zibma

    对于小于android 10的Android设备获取IMEI(国际移动设备身份),并且对android的运行时权限大于或等于10,将返回UUID并在ios上获取唯一标识。字母数字字符串,用于为应用程序提供商唯一标识设备。 使用 import '...

    IOS助手设备连接源码

    其次,"读取iOS设备信息"涵盖的内容非常广泛,包括但不限于设备型号、系统版本、序列号、IMEI、UDID(唯一设备标识符)、电池状态、存储容量等。这些信息可以通过苹果的Foundation框架中的类如UIDevice来获取。在iOS...

    获取手机上的各种信息

    iOS则不允许应用直接获取IMEI,但可以使用`identifierForVendor`来获取一个设备相关的UUID。 7. **IMSI(国际移动用户识别码)**:这是SIM卡的唯一标识,通常用于网络通信。由于隐私和安全原因,Android和iOS都不...

    iPhone获取手机型号Python代码

    此外,如果你需要更深度的设备信息,例如序列号或IMEI,可能需要借助更复杂的库,如`pyusb`或`pyobjc`,并通过USB接口与设备进行通信。 在实际应用中,为了确保代码的稳定性和兼容性,你需要考虑不同iOS版本、...

    获取移动设备唯一标识

    本文将详细讲解如何在Android和iOS平台上获取设备的唯一标识。 首先,我们来看看Android平台上的实现方法。在Android系统中,曾经有多种方式可以获取设备的唯一标识,如IMEI(International Mobile Equipment ...

    用程序获取sim信息

    例如,发送`AT+CSIM`命令可以获取SIM卡内容,而`AT+CGSN`用于获取IMEI。在.NET中,你可以使用`SerialPort`类来发送和接收这些命令。 3. **设备管理API**: 对于Windows平台,可以通过Windows Device Access API...

Global site tag (gtag.js) - Google Analytics