检查设备是否连接到iOS 12中的VPN
我正在使用下面的代码(Swift 3和Swift 4兼容)检查iOS设备上的VPN连接,该设备在iOS 12及以上版本中不工作。如何在iOS 12中检查vpn连接检查设备是否连接到iOS 12中的VPN,ios,swift,vpn,Ios,Swift,Vpn,我正在使用下面的代码(Swift 3和Swift 4兼容)检查iOS设备上的VPN连接,该设备在iOS 12及以上版本中不工作。如何在iOS 12中检查vpn连接 func isVPNConnected() -> Bool { let cfDict = CFNetworkCopySystemProxySettings() let nsDict = cfDict!.takeRetainedValue() as NSDictionary let keys = nsDic
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
}
感谢您的帮助。正在尝试将密钥“utun1”添加到您的支票中(或以“utun”作为前缀,后跟一个数字)
自iOS 12和iOS 13以来,密钥列表已更改 已添加2个键 utun1和utun2 因此,功能应该是:
static func isConnectedToVPN() -> 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" || key == "utun1" || key == "utun2") {
return true
}
}
return false
}
在我的例子中,我收到一个
ipsec4
,而应用程序无法识别VPN。
因此我想出了一些不同的办法:
struct VpnChecker {
private static let vpnProtocolsKeysIdentifiers = [
"tap", "tun", "ppp", "ipsec", "utun"
]
static func isVpnActive() -> Bool {
guard let cfDict = CFNetworkCopySystemProxySettings() else { return false }
let nsDict = cfDict.takeRetainedValue() as NSDictionary
guard let keys = nsDict["__SCOPED__"] as? NSDictionary,
let allKeys = keys.allKeys as? [String] else { return false }
// Checking for tunneling protocols in the keys
for key in allKeys {
for protocolId in vpnProtocolsKeysIdentifiers
where key.starts(with: protocolId) {
// I use start(with:), so I can cover also `ipsec4`, `ppp0`, `utun0` etc...
return true
}
}
return false
}
}
用法:VpnChecker.isVpnActive()
我还写了一篇关于它的博客文章你面临的问题是什么,我的意思是你是否验证子字符串中的密钥不可用?我的问题是我需要检查设备是否连接到vpn。不上述代码在iOS 11中运行良好,但在iOS 12中总是返回false。如何在最新的iOS中检查vpn连接?您是否验证了密钥在[string]中返回的内容?是的,始终获得“en0”我认为您在相同的IP地址中尝试了使用+1进行回答投票
struct VpnChecker {
private static let vpnProtocolsKeysIdentifiers = [
"tap", "tun", "ppp", "ipsec", "utun"
]
static func isVpnActive() -> Bool {
guard let cfDict = CFNetworkCopySystemProxySettings() else { return false }
let nsDict = cfDict.takeRetainedValue() as NSDictionary
guard let keys = nsDict["__SCOPED__"] as? NSDictionary,
let allKeys = keys.allKeys as? [String] else { return false }
// Checking for tunneling protocols in the keys
for key in allKeys {
for protocolId in vpnProtocolsKeysIdentifiers
where key.starts(with: protocolId) {
// I use start(with:), so I can cover also `ipsec4`, `ppp0`, `utun0` etc...
return true
}
}
return false
}
}