开发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. cocos2d-x使用CCClippingNode实现跑马灯

    直接在代码,这是一个很好的包layer,可以直接调用  //原来白白 bool TestLayer::init() { CCSize size = CCDirector::sharedDirector ...

  2. Mesos-error

    1,configure: error: cannot find libcurl 解决 yum install  curl-devel 版权声明:本文博客原创文章,博客,未经同意,不得转载.

  3. 推荐他们认为有用Sublime Text3小工具

    所有插件package control安装.一些国家的破解版sublime该插件是建立,安装自己的百度没有内置的方法,这里就不再重复 打开sublime.ctrl+shift+P,输入pis回车,稍等 ...

  4. C++ 内部排序(一)

    先讲两个概念,所谓内部排序,指待排序的节点均存储在内存中.所谓排序的稳定性,指排序后,值相等的两个元素原来相对的位置是否发生变化了.举个例子. 待排序列:3(1),1,5,3(2)  稳定排序:1,3 ...

  5. Cache 在选择的几点思考

    Cache为缓解DB装有重要数据,下面经常使用memcached和redis要总结,促进技术的选择. 1 memcached  (1) 有限支持的操作,持经常使用的set.get.delete和过期删 ...

  6. harris 算法python实现

    harris 最常用作特征检测算法. 第一个文件harris.py <pre name="code" class="python">from sci ...

  7. 3D空间中的AABB(轴向平行包围盒, Aixe align bounding box)的求法

    引言 在前面的一篇文章中讲述了怎样通过模型的顶点来求的模型的包围球,而且还讲述了基本包围体除了包围球之外,还有AABB包围盒.在这一章,将讲述怎样依据模型的坐标求得它的AABB盒. 表示方法 AABB ...

  8. 源码编译安装 MySQL 5.5.x 实践(转)

    1.安装cmakeMySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. # wget ht ...

  9. JavaScript中五种常见运算符

    一. in运算符 in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望它的右操作数是一个对象.如果右侧的对象拥有一个名为左操作数值的属性名,那么表达式返回true.例如: var point ...

  10. 安装 CentOS 7 后必做的七件事

    原文 安装 CentOS 7 后必做的七件事 CentOS 是最多人用来运行服务器的 Linux 版本,最新版本是 CentOS 7.当你兴趣勃勃地在一台主机或 VPS 上安装 CentOS 7 后, ...