有时候我们会碰到一种需求,去手机用户的IP 地址,判断如果是那种地址,就要做一些屏蔽什么的操作,那么我们来看一下怎么手机ip 地址
收集 ip 估计第一时间你会想到 ,去找一下有什么系统的方法,我也找了很久,一无所获,最终产生了一个新的思路
根据上图的思路,访问一个查询ip 的网页,通过正则表达式,把ip截取下来,然后在按需要执行想要的操作即可下面来看下代码段
+(void)checkIp
{
CheckReach *r =[CheckReach reachabilityForInternetConnection];
if([r currentReachabilityStatus]== NotReachable)
return ;
//ip1
dispatch_async(dispatch_get_global_queue(0, 0), ^{
// something
//匹配ip地址的正则表达式
NSString *regexStr = @"\\b(?:\\d{1,3}\\.){3}\\d{1,3}\\b";
NSString *ip1 = [IpChecker getIp:@"http://www.ip38.com/" withRegexString:regexStr];
NSLog(@"当前的ip 地址是 %@",ip1);
});
}
+(NSString *)getIp :(NSString *)urlStr withRegexString :(NSString *)regexStr
{
// 如果网址中存在中文,进行URLEncode
NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// 2.构建网络URL对象, NSURL
NSURL *url = [NSURL URLWithString:newUrlStr];
if (url == nil) {
return @"";
}
// 3.创建网络请求
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
// 创建同步链接
NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if(data==nil)
return @"";
//返回静态网页字符串
NSString *responseStr = STRING_SAFELY([[NSString alloc] initWithData:data encoding:0x80000632]);
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexStr options:0 error:&error];
NSString *result = @"";
if (regex != nil) {
NSTextCheckingResult *firstMatch=[regex firstMatchInString:responseStr options:0 range:NSMakeRange(0, [responseStr length])];
if (firstMatch) {
NSRange resultRange = [firstMatch rangeAtIndex:0];
//从urlString当中截取数据
result= STRING_SAFELY([responseStr substringWithRange:resultRange]);
//输出结果
}
}
return result;
}
下面的是github 地址,有什么问题,可以加微信或qq讨论或者评论,
https://github.com/heysunnyboy/ipChecker.git