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 ...
随机推荐
- 第二章_session管理
2.1 URL重写 URL重写是Session追踪技术.须要将一个或多个token做为一个查询字符串加入到一个URL中. Token的格式通常是键=值. Url?key-1=value-1&k ...
- Linux-2.6.32内核编译流量计数器nfacct
最近一直想看到一本书<一个Jiegeng华>.而技术不依赖书.但是,这并不表示我IT技术没有兴趣.事实证明,,当我无法理解的沧桑.肮脏的领导者无法理解的心理.自我可惜无法理解它处处感受到脏 ...
- EJB(一)认识ejb
什么是ejb? 相同仍旧在这个系列博客之处,谈谈对ejb的认识和理解. sun微公司对于ejb的定义大体是这种,ejb是一套用于开发和部署分布式组件的的架构.採用ejb的架构应用能够是 ...
- JAVA基金会 (三)反射 反思的深度分析
上一页已经推出反映的一些基本概念,这主要是通过一个例子反映谈的过程,以及样品的实际应用. 这个样例是这种设计思路:从一个属性文件里读取一段字符串,然后,依据该字符串生成相应的类实例对象:这之后另一个增 ...
- NSIS:卸载加密码示例
原文 NSIS:卸载加密码示例 最近有几个同学问我关于卸载时加密码的问题,其实很简单,懂点基础就可以根据安装加密码那篇文章http://www.flighty.cn/html/bushu/201009 ...
- 采用shell脚本统计代码的行数
刚毕业那会儿有一次去台湾公司面试,我问多行代码怎么写.我从来没有想过这个问题,粗略计算,.惊叹:大概几十万行不行. 最近整理资料,看着eclipse左边全面上市,我觉得这个东西.代码共同拥有的行倒底总 ...
- Git是个好工具(转)
Git是分布式版本控制系统,我们常用的版本控制工具还有SVN.这里就得区分下什么是分布式版本控制系统,什么是集中化的版本控制系统. 集中化的版本控制系统 集中化的版本控制系统( Centralized ...
- Android读取JSON格式数据
Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格 ...
- STL algorithm算法min,min_element(35)
min样板: std::min C++98 C++11 C++14 default (1) template <class T> const T& min (const T& ...
- poj2443(简单的状态压缩)
POJ2443 Set Operation Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 2679 Accepted: ...