开发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"]; }