参考链接:
https://www.jianshu.com/p/c3b950dbf86a
https://gist.github.com/PramodJoshi/4faad4c91f7dcb4eb9b06be8390c01db
http://noodlecode.net/2018/04/check-if-ios-app-is-connected-to-vpn
https://www.jianshu.com/p/c3b950dbf86a
https://gist.github.com/PramodJoshi/4faad4c91f7dcb4eb9b06be8390c01db
http://noodlecode.net/2018/04/check-if-ios-app-is-connected-to-vpn
第一种方法
需要导入框架CFNetwork
然后,这个方法是mrc的:需要添加-fno-objc-arc的flag
代码如下:
然后,这个方法是mrc的:需要添加-fno-objc-arc的flag
代码如下:
+ (BOOL)getProxyStatus {
NSDictionary *proxySettings = NSMakeCollectable([(NSDictionary *)CFNetworkCopySystemProxySettings() autorelease]);
NSArray *proxies = NSMakeCollectable([(NSArray *)CFNetworkCopyProxiesForURL((CFURLRef)[NSURL URLWithString:@"http://www.google.com"], (CFDictionaryRef)proxySettings) autorelease]);
NSDictionary *settings = [proxies objectAtIndex:0];
NSLog(@"host=%@", [settings objectForKey:(NSString *)kCFProxyHostNameKey]);
NSLog(@"port=%@", [settings objectForKey:(NSString *)kCFProxyPortNumberKey]);
NSLog(@"type=%@", [settings objectForKey:(NSString *)kCFProxyTypeKey]);
if ([[settings objectForKey:(NSString *)kCFProxyTypeKey] isEqualToString:@"kCFProxyTypeNone"])
{
//没有设置代理
return NO;
}
else
{
//设置代理了
return YES;
}
}
第二种方法
func isVPNConnected() -> Bool {
let cfDict = CFNetworkCopySystemProxySettings()
let nsDict = cfDict!.takeRetainedValue() as NSDictionary
let keys = nsDict["__SCOPED__"] as! NSDictionary
for key: String in keys.allKeys as! [String] {
if (key == "tap" || key == "tun" || key == "ppp" || key == "ipsec" || key == "ipsec0") {
return true
}
}
return false
}
第三种方法
func isConnectedToVpn() -> Bool {
let host = "www.example.com"
guard let reachability = SCNetworkReachabilityCreateWithName(nil, host) else {
return false
}
var flags = SCNetworkReachabilityFlags()
if SCNetworkReachabilityGetFlags(reachability, &flags) == false {
return false
}
let isOnline = flags.contains(.reachable) && !flags.contains(.connectionRequired)
if !isOnline {
return false
}
let isMobileNetwork = flags.contains(.isWWAN)
let isTransientConnection = flags.contains(.transientConnection)
if isMobileNetwork {
if let settings = CFNetworkCopySystemProxySettings()?.takeRetainedValue() as? Dictionary<String, Any>,
let scopes = settings["__SCOPED__"] as? [String:Any] {
for (key, _) in scopes {
if key.contains("tap") || key.contains("tun") || key.contains("ppp") {
return true
}
}
}
return false
} else {
return isTransientConnection
}
}
func isConnectedToProxy() -> Bool {
let host = "http://www.example.com"
if let url = URL(string: host),
let proxySettingsUnmanaged = CFNetworkCopySystemProxySettings() {
let proxySettings = proxySettingsUnmanaged.takeRetainedValue()
let proxyUnmanaged = CFNetworkCopyProxiesForURL(url as CFURL, proxySettings)
if let proxies = proxyUnmanaged.takeRetainedValue() as? [[String : AnyObject]], proxies.count > 0 {
let proxy = proxies[0]
let key = kCFProxyTypeKey as String
let value = kCFProxyTypeNone as String
if let v = proxy[key] as? String, v != value {
return true
}
}
}
return false
}
评论
发表评论