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 = ;
int result = res_ninit(res);
if (result == ) {
dwDNSIP = res->nsaddr_list[].sin_addr.s_addr;
}
free(res);
NSString *dns = [NSString stringWithUTF8String:inet_ntoa(res->nsaddr_list[].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 = ; 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:
range:NSMakeRange(, [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:
range:NSMakeRange(, [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:
range:NSMakeRange(, [responseStr length])];
if ([matches count] != ) {
[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:
range:NSMakeRange(, [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:
range:NSMakeRange(, [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 设备基本信息检测的更多相关文章
- 获取IOS 设备基本信息
原地址:http://www.cnblogs.com/U-tansuo/p/ios_basis_info.html 1.获取设备类型 (Iphone/ipad 几?) #import "s ...
- [原]IOS 设备基本信息
1.获取设备类型 (Iphone/ipad 几?) #import "sys/utsname.h" -(NSString*)getDeviceVersion{ struct ...
- IOS设备 UIDevice 获取操作系统 版本 电量 临近手机触发消息检测 (真机亲测可用)
- (void)viewDidLoad { [super viewDidLoad]; // 操作系统 NSString * osName =[[UIDevice currentDevice]syste ...
- [转]iOS设备唯一标识探讨
转自:http://www.jianshu.com/p/b83b0240bd0e iOS设备唯一标识探讨 为了统计和检测应用的使用数据,几乎每家公司都有获取唯一标识的业务需求,在iOS5以前获取唯一标 ...
- iOS学习——获取iOS设备的各种信息
不管是在Android开发还是iOS开发过程中,有时候我们需要经常根据设备的一些状态或信息进行不同的设置和性能配置,例如横竖屏切换时,电池电量低时,内存不够时,网络切换时等等,我们在这时候需要进行一些 ...
- Mac平台下部署UE4工程到iOS设备的流程
1.开发环境 UE4.Xcode.iOS版本情况如下: 1.UE4:当前最新版本Unreal Engine 4.17.2. 2.Xcode:当前最新版本Xcode9.0. 3.iOS:当前最新版本iO ...
- 经验之道:最有效的iOS内存泄漏检测
版权声明:本文由胡涛原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/125 来源:腾云阁 https://www.qclou ...
- 使用Safari远程调试iOS设备网页
最近在做HTML 5游戏时,发布到手机上访问网页总是莫名其妙出现问题,苦于没有remote debug功能一直没有查找到问题. 这边博客详细介绍了iOS, Android, Windows Phone ...
- 使用Fiddler对Android或者iOS设备进行抓包
1.PC端Fiddler配置 Tools->HTTPS->选中“Decrpt HTTPS traffic”,“Ignore server certificate errors” Tools ...
随机推荐
- 设备11g_rac配置对等
linux平台安装oracle 11gssh同等配置简单 构造grid用户任关系 登陸rac1,rac2分别运行: $ su - grid $mkdir ~/.ssh $chmod 700 ~/.ss ...
- 模拟Vue之数据驱动3
一.前言 在"模拟Vue之数据驱动2"中,我们实现了个Observer构造函数,通过它可以达到监听已有数据data中的所有属性. 但,倘若我们想在某个对象中,新增某个属性呢? 如下 ...
- QlikView线图高亮选择尺寸
作为标题,如今,学生问我一个问题.尺寸Month.expression它是Count(Id). 这个图是一个折线图,不管你选择哪个月的其他下拉列表,销售量.由于Expression里面是这样写的 Co ...
- c#左右socket连接超时控制方案
之前有一个项目中使用Remoting技术.当远程地址无效或server不执行,访问远程对象的方法,它会经过几十秒的时间来抛出异常秒. 由于我使用tcp状态.因此,认为可以使用socket为了测试连接, ...
- SOA两个接口通常用于实现更:SOAP vs REST
SOA协作架构异构系统,因此,一个跨操作系统的需求.跨语言的通用信息交换格公式. SOAP和REST它们是基于消息正文文本,在跨平台方面相比二进制消息优点.因此,作为选择SOA实施通常用于界面.但SO ...
- Oracle 多行转多列
Oracle 多行转多列,列值转为列名 前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要到处问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的 ...
- 网站的SEO以及它和站长工具的之间秘密(转)
博客迁移没有注意 URL 地址的变化,导致百度和 google 这两只爬虫引擎短时间内找不到路.近段时间研究了下国内最大搜索引擎百度和国际最大搜索引擎google的站长工具,说下感受. 百度的站长工具 ...
- 仿jQuery之链式调用
链式调用的形式其实就是对象调用一连串的方法.为什么能连续调用这么多的方法?因为调用方法返回调用的对象,于是乎就可以一如既往,一往无前地调用下去.链式调用的原理就是在方法中返回执行上下文this,每次调 ...
- 关于ACM,关于CSU
原文地址:http://tieba.baidu.com/p/2432943599 前言: 即将进入研二,ACM的事情也渐渐远去,记忆终将模糊,但那段奋斗永远让人热血沸腾.开个贴讲讲ACM与中南的故事, ...
- Android FM学习中的模块 FM启动过程
最近的研究FM模,FM是一家值我正在学习模块.什么可以从上层中可以看出. 上层是FM按钮的操作和界面显示,因此调用到FM来实现广播收听的功能. 看看Fm启动流程:例如以下图: 先进入FMRadio.j ...