问题描述
我正在尝试使用 Swift
连接到 vpn。我创建了类 VpnHandler
并且我正在使用钥匙串 Swift
来保持钥匙串引用。
我的代码如下所示:
import Foundation
import NetworkExtension
import KeychainSwift
final class VPNHandler {
let vpnManager = NEVPNManager.shared()
func initVPNTunnelProviderManager(serverAdress: String,remoteIdentifier : String,sharedSecred:String) {
let sharedKey = sharedSecred.data(using: .utf8)
let keychain = KeychainSwift()
guard let sharedKey = sharedKey else { return }
keychain.set(sharedKey,forKey: "shared_secret")
vpnManager.loadFromPreferences { error in
if let error = error {
print(error.localizedDescription)
return
}
let IKEv2Protocol = NEVPNProtocolIKEv2()
IKEv2Protocol.username = nil
IKEv2Protocol.localIdentifier = nil
IKEv2Protocol.serverAddress = serverAdress
IKEv2Protocol.remoteIdentifier = remoteIdentifier
IKEv2Protocol.authenticationMethod = .sharedSecret
IKEv2Protocol.disconnectOnSleep = false
IKEv2Protocol.useExtendedAuthentication = false
IKEv2Protocol.sharedSecretReference = keychain.getData("shared_secret",asReference: true)
IKEv2Protocol.passwordReference = nil
var rules = [NEondemandRule]()
let rule = NEondemandRuleConnect()
rule.interfaceTypeMatch = .any
rules.append(rule)
self.vpnManager.localizedDescription = "My VPN"
self.vpnManager.protocolConfiguration = IKEv2Protocol
self.vpnManager.ondemandRules = rules
self.vpnManager.isondemandEnabled = true
self.vpnManager.isEnabled = true
print("SAVE TO PREFERENCES...")
self.vpnManager.savetoPreferences { error in
if (error != nil) {
print(error!)
return
}
print("CALL LOAD TO PREFERENCES AGAIN...")
self.vpnManager.loadFromPreferences { error in
if let error = error {
print(error.localizedDescription)
return
}
do {
try self.vpnManager.connection.startVPNTunnel()
print("Starting VPN...")
} catch let error {
print("can't connect VPN'")
print(error.localizedDescription)
}
}
}
}
}
}
当我调用函数 initVPNTunnelProviderManager
时,会创建电话设置中的 vpn 配置。我们的应用程序开始连接到 vpn,但随后立即断开连接。当我们在电话设置中连接 vpn 配置时,它正在工作。
我不知道是什么问题。
感谢任何帮助。
提前致谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)