如何检测iPhone的VPN连接?
我需要检测iphone是否连接到VPN,编程方式。 我正在开发一个应用程序,试图加载URL,这个页面只有当设备连接到VPN时才打开。 在加载这个URL之前,我需要检查VPN连接。 我尝试了以下。 但是这并不像预期的那样工作。
- (BOOL)checkForVPNConnectivity { NSDictionary *dict = (__bridge NSDictionary *)(CFNetworkCopySystemProxySettings()); //NSLog(@"cfnetwork proxy setting : %@", dict); return [dict count] > 0; }
我不认为应该通过检查CFNetworkCopySystemProxySettings()
中的非零数量的元素来确定VPN连接。 (例如,我在WiFinetworking上查看条目,但在VPN上查看条目。)
所以有两点意见:
-
我会考虑使用
SystemConfiguration.framework
并使用以下代码与您的VPN上的东西的主机名:- (BOOL)checkForConnectivity:(NSString *)hostName { BOOL success = false; SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, [hostName UTF8String]); SCNetworkReachabilityFlags flags; success = SCNetworkReachabilityGetFlags(reachability, &flags); CFRelease(reachability); NSLog(@"success=%x", flags); // this is the standard non-VPN logic, you might have to alter it for VPN connectivity BOOL isAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired); if (isAvailable) { NSLog(@"Host is reachable: %d", flags); return YES; }else{ NSLog(@"Host is unreachable"); return NO; } }
假设
success
是非零的,你可能不得不做一些关于flags
位设置的实证研究。 有关这些标志的技术定义,请参阅SCNetworkReachability参考 。 我听说他们得到kSCNetworkReachabilityFlagsReachable | kSCNetworkReachabilityFlagsTransientConnection
当VPN连接时,kSCNetworkReachabilityFlagsReachable | kSCNetworkReachabilityFlagsTransientConnection
,但我没有一个VPN,所以我不能testing这种说法。 我build议尝试使用和不使用VPN,看看你是否得到不同的flags
返回。 -
无关的问题,您的代码示例将泄漏。 如果使用ARC,不要忘记使用
CFBridgingRelease
或__bridge_transfer
。 或者不pipe是否在ARC中,在返回之前显式调用CFRelease
。如果在最新版本的Xcode中运行静态分析器(按shift + command + B或从“Product”菜单中select“Analyze”),它会警告您关于Core Foundation调用的内存pipe理。
无论如何,这是我倾向于在ARC中处理它的方式:
- (BOOL)checkForVPNConnectivity { NSDictionary *dict = CFBridgingRelease(CFNetworkCopySystemProxySettings()); return [dict count] > 0; }
对于上述问题,您可以使用简单的解决方法。
只需使用苹果可达性来检查哪些设备连接到互联网或不。 如果没有抛出互联网连接错误。如果是的话,尝试使用NSURLConnection访问您的VPN依赖的URL。如果您获得成功200这样,即您连接到VPN.If此请求返回主机找不到或任何错误,如-1001意味着你没有连接到VPN.Then你可以抛出相应的VPN连接错误的用户。快乐的编码…. Arun kumar
欲了解更多信息,请参阅我的博客http://aruntheiphonedeveloper.blogspot.in