开发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 设备基本信息检测的更多相关文章

  1. 获取IOS 设备基本信息

    原地址:http://www.cnblogs.com/U-tansuo/p/ios_basis_info.html 1.获取设备类型  (Iphone/ipad 几?) #import "s ...

  2. [原]IOS 设备基本信息

    1.获取设备类型  (Iphone/ipad 几?) #import "sys/utsname.h" -(NSString*)getDeviceVersion{    struct ...

  3. IOS设备 UIDevice 获取操作系统 版本 电量 临近手机触发消息检测 (真机亲测可用)

    - (void)viewDidLoad { [super viewDidLoad]; // 操作系统 NSString * osName =[[UIDevice currentDevice]syste ...

  4. [转]iOS设备唯一标识探讨

    转自:http://www.jianshu.com/p/b83b0240bd0e iOS设备唯一标识探讨 为了统计和检测应用的使用数据,几乎每家公司都有获取唯一标识的业务需求,在iOS5以前获取唯一标 ...

  5. iOS学习——获取iOS设备的各种信息

    不管是在Android开发还是iOS开发过程中,有时候我们需要经常根据设备的一些状态或信息进行不同的设置和性能配置,例如横竖屏切换时,电池电量低时,内存不够时,网络切换时等等,我们在这时候需要进行一些 ...

  6. Mac平台下部署UE4工程到iOS设备的流程

    1.开发环境 UE4.Xcode.iOS版本情况如下: 1.UE4:当前最新版本Unreal Engine 4.17.2. 2.Xcode:当前最新版本Xcode9.0. 3.iOS:当前最新版本iO ...

  7. 经验之道:最有效的iOS内存泄漏检测

    版权声明:本文由胡涛原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/125 来源:腾云阁 https://www.qclou ...

  8. 使用Safari远程调试iOS设备网页

    最近在做HTML 5游戏时,发布到手机上访问网页总是莫名其妙出现问题,苦于没有remote debug功能一直没有查找到问题. 这边博客详细介绍了iOS, Android, Windows Phone ...

  9. 使用Fiddler对Android或者iOS设备进行抓包

    1.PC端Fiddler配置 Tools->HTTPS->选中“Decrpt HTTPS traffic”,“Ignore server certificate errors” Tools ...

随机推荐

  1. 什么场景Hbase

    Hbase不太复杂,但适合于存储大量的数据资料.因为是商城系统:用户.商品.订单,店,卖家,这些数据是不适合复杂的关系Hbase. 有一个非常大的数据量订购,并经常来计算.只考虑存款订单Hbase. ...

  2. think in coding

    ,想想除了技术还有什么? 你假设形而下的去纠结技术.仅仅会变成技术的傀儡.他们仅仅是一种表达的方式? 希望你能够形而上的去看待技术,技术千变万化,但都是为了解决这个问题的方式. 请问问自己,自己问题是 ...

  3. etl工具,kettle实现了周期

    Kettle这是国外的来源ETL工具,纯java写.能Window.Linux.Unix在执行.绿色无需安装,稳定高效的数据提取. 业务模型: 在关系型数据库中有张非常大的数据存储表,被设计成奇偶库存 ...

  4. React-Native基础教程

    React-Native牛刀小试仿京东砍啊砍砍到你手软 React-Native基础教程 *React-Native基础篇作者git *React-Native官方文档 *Demo 几个月前faceb ...

  5. mfc配置GDI+有106个错误

    mfc配置GDI+有106个错误,处理如下,参考http://bbs.csdn.net/topics/380054079 一开始#include...放在stdafx.h里有错误,后来上面修改好了,放 ...

  6. C# 字符串知识整理

    新知识点,只是对于本人来说而已. 系统处理文本的方式 [新知识点].NET Framework .NET Framework的定义:其包含了一个公共语言运行时(Common Language Runt ...

  7. 设计与实现简单而经常使用的权限系统(四):无需维护level,递归构建树

    第三篇中.我们通过维护节点的深度level,通过迭代全部的节点,仅仅须要一次,就构造了树.  本篇.换一种方式. 优点是:不维护节点的深度level,添加和改动节点时,也不用维护.递归实现,代码比較清 ...

  8. poj 2689 巧妙地运用素数筛选

    称号: 给出一个区间[L,R]求在该区间内的素数最短,最长距离. (R < 2 * 10^9 , R - L <= 10 ^ 6) 由数论知识可得一个数的因子可在开根号内得到. 所以,我们 ...

  9. JSON-C结构简介、使用

    官方站点介绍http://www.json.org JSON (JavaScript Object Notation) is a lightweight data-interchange format ...

  10. linux VIM基本命令

    linux VIM命令: vim 在命令行中输入vim,进入vim编辑器 Esc 退出i(插入)命令进行其他命令使用 :sh 进入shell命令行,运行完命令后ctrl+d退出又一次进入vim编辑继续 ...