iOS 获取手机ip 地址

有时候我们会碰到一种需求,去手机用户的IP 地址,判断如果是那种地址,就要做一些屏蔽什么的操作,那么我们来看一下怎么手机ip 地址
收集 ip 估计第一时间你会想到 ,去找一下有什么系统的方法,我也找了很久,一无所获,最终产生了一个新的思路

iOS 获取手机ip 地址_第1张图片
AB7540C2-10B0-4671-A9D2-DABE8A618CD4.png

根据上图的思路,访问一个查询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

你可能感兴趣的:(iOS 获取手机ip 地址)