有時候我們會碰到一種需求,去手機用戶的IP 地址,判斷如果是那種地址,就要做一些屏蔽什么的操作,那么我們來看一下怎么手機ip 地址
收集 ip 估計第一時間你會想到 ,去找一下有什么系統的方法,我也找了很久,一無所獲,最終產生了一個新的思路
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