当未开启wifi设置中的HTTP代理以及VPN时.网络设置如下所示
当我们开启了设置中的HTTP代理时
当我们开启UU加速器时,多了一个utun0
.这个是VPN隧道协议.
当我们VPN和HTTP代理同时开启时
检测是否开启了VPN
我们可以看看除了en0之外还有没有其他的key
- (BOOL)checkHasVPN {
BOOL flag = NO;
NSString *version = [UIDevice currentDevice].systemVersion;
if (version.doubleValue >= 9.0) {// 目前测试了iOS 9 - iOS 14.以下的设备实在是找不到...
NSDictionary *dict = CFBridgingRelease(CFNetworkCopySystemProxySettings());
NSArray *keys = [dict[@"__SCOPED__"] allKeys];
for (NSString *key in keys) {
// 可以用这里的代码检测,这里的中判断的字符串是VPN的协议,其实也不太全,或者用下面的不等于en0判断.
// if ([key rangeOfString:@"tap"].location != NSNotFound ||
// [key rangeOfString:@"tun"].location != NSNotFound ||
// [key rangeOfString:@"ipsec"].location != NSNotFound ||
// [key rangeOfString:@"ppp"].location != NSNotFound){
// flag = YES;
// break;
// }
if (![key isEqualToString:@"en0"]) {
flag = YES;
}
}
}
return flag;
}
检测是否开启了设置->无线局域网->HTTP代理
我们可以看en0的网络有没有HTTPProxy或者是HTTPSProxy
- (BOOL)checkHasHTTPProxy {
BOOL flag = NO;
NSString *version = [UIDevice currentDevice].systemVersion;
if (version.doubleValue >= 9.0) {// 目前测试了iOS 9 - iOS 14.以下的设备实在是找不到...
NSDictionary *dict = CFBridgingRelease(CFNetworkCopySystemProxySettings());
NSArray *keys = [dict[@"__SCOPED__"] allKeys];
for (NSString *key in keys) {
if ([key isEqualToString:@"en0"]) {// 非本地端口
NSDictionary *keyDic = [[dict objectForKey:@"__SCOPED__"] objectForKey:@"en0"];
NSString *HTTPProxy = [keyDic objectForKey:@"HTTPProxy"];
NSString *HTTPSProxy = [keyDic objectForKey:@"HTTPSProxy"];
BOOL hasHTTPProxy = ![HTTPProxy isEqualToString:@""] && HTTPProxy != nil;
BOOL hasHTTPSProxy = ![HTTPSProxy isEqualToString:@""] && HTTPSProxy != nil;
if (hasHTTPProxy || hasHTTPSProxy) {
flag = YES;
}
}
}
}
return flag;
}
后记
如果仅仅是想防止HTTP抓包.时候上面的HTTP代理判断一下是否开启即可.对于有些手机上通过VPN软件形式本地抓包的软件类似Stream
就需要使用上面两种方法一起来禁止抓包