获取手机 id 与 ip

//id

#import <AdSupport/AdSupport.h>

//ip

#include <ifaddrs.h>

#include <arpa/inet.h>

 

#pragma mark -- 获取用户 id

 

//通过AdSupport获取UUID(原因AdSupport可以跨应用)

- (NSString *)appleIFA {

    

    NSString *ifa = nil;

    Class ASIdentifierManagerClass = NSClassFromString(@"ASIdentifierManager");

    if (ASIdentifierManagerClass) { // a dynamic way of checking if AdSupport.framework is available

        SEL sharedManagerSelector = NSSelectorFromString(@"sharedManager");

        id sharedManager = ((id (*)(id, SEL))[ASIdentifierManagerClass methodForSelector:sharedManagerSelector])(ASIdentifierManagerClass, sharedManagerSelector);

        SEL advertisingIdentifierSelector = NSSelectorFromString(@"advertisingIdentifier");

        NSUUID *advertisingIdentifier = ((NSUUID* (*)(id, SEL))[sharedManager methodForSelector:advertisingIdentifierSelector])(sharedManager, advertisingIdentifierSelector);

        ifa = [advertisingIdentifier UUIDString];

    }

    return ifa;

}

 

 

//如果不支持AdSupport,那就使用IFV/IDFV (Identifier for Vendor)

 

- (NSString *)appleIFV {

    if(NSClassFromString(@"UIDevice") && [UIDevice instancesRespondToSelector:@selector(identifierForVendor)]) {

        // only available in iOS >= 6.0

        return [[UIDevice currentDevice].identifierForVendor UUIDString];

    }

    return nil;

}

 

 

#pragma mark -- 获取用户ip

ios获取ip地址

字数297 阅读287 评论1 

包含头文件

#include <ifaddrs.h>

#include<arpa/inet.h>

#include<net/if.h>

#define IOS_CELLULAR    @"pdp_ip0"

#define IOS_WIFI        @"en0"

#define IOS_VPN        @"utun0"

#define IP_ADDR_IPv4    @"ipv4"

#define IP_ADDR_IPv6    @"ipv6"

获取ip方式  NSLog(@"-----%@",[self getIPAddress:YES]);

- (NSString *)getIPAddress:(BOOL)preferIPv4

{

NSArray *searchArray = preferIPv4 ?

@[ IOS_VPN @"/" IP_ADDR_IPv4, IOS_VPN @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6 ] :

@[ IOS_VPN @"/" IP_ADDR_IPv6, IOS_VPN @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4 ] ;

NSDictionary *addresses = [self getIPAddresses];

NSLog(@"addresses: %@", addresses);

__block NSString *address;

[searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop)

{

address = addresses[key];

if(address) *stop = YES;

} ];

return address ? address : @"0.0.0.0";

}

- (NSDictionary *)getIPAddresses

{

NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8];

// retrieve the current interfaces - returns 0 on success

struct ifaddrs *interfaces;

if(!getifaddrs(&interfaces)) {

// Loop through linked list of interfaces

struct ifaddrs *interface;

for(interface=interfaces; interface; interface=interface->ifa_next) {

if(!(interface->ifa_flags & IFF_UP) /* || (interface->ifa_flags & IFF_LOOPBACK) */ ) {

continue; // deeply nested code harder to read

}

const struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr;

char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ];

if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) {

NSString *name = [NSString stringWithUTF8String:interface->ifa_name];

NSString *type;

if(addr->sin_family == AF_INET) {

if(inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {

type = IP_ADDR_IPv4;

}

} else {

const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr;

if(inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {

type = IP_ADDR_IPv6;

}

}

if(type) {

NSString *key = [NSString stringWithFormat:@"%@/%@", name, type];

addresses[key] = [NSString stringWithUTF8String:addrBuf];

}

}

}

// Free memory

freeifaddrs(interfaces);

}

return [addresses count] ? addresses : nil;

}

 

 

 

 

//设备ip地址

#import <ifaddrs.h>

#import <arpa/inet.h>

- (NSString *)deviceIPAdress {

    NSString *address = @"an error occurred when obtaining ip address";

    struct ifaddrs *interfaces = NULL;

    struct ifaddrs *temp_addr = NULL;

    int success = 0;

    

    success = getifaddrs(&interfaces);

    

    if (success == 0) { // 0 表示获取成功

        

        temp_addr = interfaces;

        while (temp_addr != NULL) {

            if( temp_addr->ifa_addr->sa_family == AF_INET) {

                // Check if interface is en0 which is the wifi connection on the iPhone

                if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {

                    // Get NSString from C String

                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];

                }

            }

            

            temp_addr = temp_addr->ifa_next;

        }

    }

    

    freeifaddrs(interfaces);

    return address;

}

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/daxueshan/p/6046784.html