ios 设备基本信息检测

开发ios确实会让人身心愉悦(相对于deskop,android),ios app更多的让人集中注意力到它本身的体验,性能。这非常好,我非常喜欢相对完美的事物。

最近遇到一些乱七八糟的需求。需要获取一些设备信息,网络情况。iOS 上开发非常简单有趣,除了一些乱七八糟的信息,例如:摄像头硬件信息,本地相册初始化时间(第一次拍照保存),等。

剩下一些信息就是我要的了:

还是代码演示:

#define IOS_CELLULAR    @"pdp_ip0"

#define IOS_WIFI        @"en0"

#define IP_ADDR_IPv4    @"ipv4"

#define IP_ADDR_IPv6    @"ipv6"

#define ADDRESSIP   @"http://www.cz88.net/ip/viewip778.aspx"

#define ADDRESSIPWY @"http://nstool.netease.com/"
//获取本地的DNS IP

+ (NSDictionary *)getDNSIp {

    res_state res = (res_state)malloc(sizeof(struct __res_state));

    __uint32_t dwDNSIP = 0;

    int result = res_ninit(res);

    if (result == 0) {

        dwDNSIP = res->nsaddr_list[0].sin_addr.s_addr;

    }

    free(res);

    NSString *dns = [NSString stringWithUTF8String:inet_ntoa(res->nsaddr_list[0].sin_addr)];

    NSDictionary *tmp = [[NSDictionary alloc] initWithObjectsAndKeys: dns, @"LocalDNS", nil];

    return tmp;

}
//获取制定域名的IP地址

+ (NSDictionary *)ServersToIp:(NSString *)ip {

    Boolean result;

    CFHostRef hostRef;

    CFArrayRef addresses=nil;

    NSString *hostname = ip;

    NSMutableArray *array = [[NSMutableArray alloc] init];

    hostRef = CFHostCreateWithName(kCFAllocatorDefault, (__bridge CFStringRef)hostname);

    if (hostRef) {

        result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL); // pass an error instead of NULL here to find out why it failed

        if (result == TRUE) {

            addresses =  CFHostGetAddressing(hostRef, &result);

        }

    }

    if (result == TRUE) {

        NSMutableArray *tempDNS = [[NSMutableArray alloc] init];

        for(int i = 0; i < CFArrayGetCount(addresses); i++){

            struct sockaddr_in* remoteAddr;

            CFDataRef saData = (CFDataRef)CFArrayGetValueAtIndex(addresses, i);

            remoteAddr = (struct sockaddr_in*)CFDataGetBytePtr(saData);

            

            if(remoteAddr != NULL){

                // Extract the ip address

                //const char *strIP41 = inet_ntoa(remoteAddr->sin_addr);

                NSString *strDNS =[NSString stringWithCString:inet_ntoa(remoteAddr->sin_addr) encoding:NSASCIIStringEncoding];

                [array addObject:strDNS];

                [tempDNS addObject:strDNS];

            }

        }

    } else {

        NSLog(@"Not resolved");

    }

    return [NSDictionary dictionaryWithObjectsAndKeys: array, ip, nil];

}
/*第三方获取外网ip*/
//
全真ip + (NSDictionary*)getWanIPAddress { NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; NSMutableArray *ip_array = [[NSMutableArray alloc] init]; NSMutableArray *pos_array = [[NSMutableArray alloc] init]; NSURLRequest *request = [NSMutableURLRequest requestWithURL:[[NSURL alloc]initWithString: ADDRESSIP] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10.0]; NSError *error = nil; NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error]; if (error == nil) { NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); NSString *responseStr = [[NSString alloc] initWithData:data encoding:enc]; NSError *error = NULL; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" options:NSRegularExpressionCaseInsensitive error:&error]; if (error == nil) { NSArray *matches = [regex matchesInString:responseStr options:0 range:NSMakeRange(0, [responseStr length])]; for (NSTextCheckingResult *match in matches) { [ip_array addObject:[responseStr substringWithRange:match.range]]; // NSLog(@"the ip address:%@", [responseStr substringWithRange:match.range]); } } regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=AddrMessage\">).*(?=</spa)" options:NSRegularExpressionCaseInsensitive error:&error]; if (error == nil) { NSArray *matches = [regex matchesInString:responseStr options:0 range:NSMakeRange(0, [responseStr length])]; for (NSTextCheckingResult *match in matches) { [pos_array addObject:[responseStr substringWithRange:match.range]]; // NSLog(@"设备位置:%@", [responseStr substringWithRange:match.range]); } } [dic setValue:ip_array forKey:@"ip"]; [dic setValue:pos_array forKey:@"positon"]; } else { [dic setValue:error forKey:@"get error"]; } return dic; } //网易ip + (NSDictionary*)getWanIPAddressWY { NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; NSMutableArray *ip_array = [[NSMutableArray alloc] init]; NSMutableArray *dns_array = [[NSMutableArray alloc] init]; NSURLRequest *request = [NSMutableURLRequest requestWithURL:[[NSURL alloc]initWithString: ADDRESSIPWY] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10.0]; NSError *error = nil; NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error]; if (error == nil) { NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); NSString *responseStr = [[NSString alloc] initWithData:data encoding:enc]; NSError *error = NULL; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=<iframe src=').*(?=' frameborder)" options:NSRegularExpressionCaseInsensitive error:&error]; if (error == nil) { NSArray *matches = [regex matchesInString:responseStr options:0 range:NSMakeRange(0, [responseStr length])]; if ([matches count] != 1) { [dic setValue:@"count != 1" forKey:@"get error"]; return dic; } for (NSTextCheckingResult *match in matches) { request = [NSMutableURLRequest requestWithURL:[[NSURL alloc]initWithString: [responseStr substringWithRange:match.range]] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10.0]; NSError *error = nil; NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error]; if (error == nil) { NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); NSString *resStr = [[NSString alloc] initWithData:data encoding:enc]; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"您的IP地址信息:.*?(?=<br>)" options:NSRegularExpressionCaseInsensitive error:&error]; if (error == nil) { NSArray *matches = [regex matchesInString:resStr options:0 range:NSMakeRange(0, [resStr length])]; for (NSTextCheckingResult *match in matches) { [ip_array addObject:[resStr substringWithRange:match.range]]; // NSLog(@"ip msg:%@", [resStr substringWithRange:match.range]); } } regex = [NSRegularExpression regularExpressionWithPattern:@"您的DNS地址信息:.*?(?=<br>)" options:NSRegularExpressionCaseInsensitive error:&error]; if (error == nil) { NSArray *matches = [regex matchesInString:resStr options:0 range:NSMakeRange(0, [resStr length])]; for (NSTextCheckingResult *match in matches) { [dns_array addObject:[resStr substringWithRange:match.range]]; // NSLog(@"DNS msg:%@", [resStr substringWithRange:match.range]); } } [dic setValue:ip_array forKey:@"ip"]; [dic setValue:dns_array forKey:@"positon"]; } } } else { [dic setValue:@"count != 1" forKey:@"get error"]; } } else { [dic setValue:@"count != 1" forKey:@"get error"]; } return dic; }
#pragma mark - deviceMsg

//idfa idfv 基本的设备信息

- (void)getDevMsg {

    UIDevice *device=[[UIDevice alloc] init];

    NSString *idfaString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

}
#pragma mark - wifiStatus

//获取Wi-Fi信息(如果链接了wifi)

- (void)detectWifi{

    NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();

    id info = nil;

    for (NSString *ifnam in ifs) {

        info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);

        if(info != nil){

               //TODU

        }

    }

    [self finishStatus:@"wifi"];

}

你可能感兴趣的:(ios)