我正在尝试使用网络扩展来启动VPN数据包隧道,但vpn总是停留在“连接”状态。但是,personal VPN确实使用这些相同的设置进行连接。在调用startVPNtunnel之后,将调用PackTunnel扩展函数,但状态仍为Connecting
// Hard code VPN configurations
let tunnelBundleId = "group.linkapp.PacketTunnel"
let host = "hide.me"
let serverAddress = "free-ca.hide.me"
let username = "wahwah"
let password = "123456"
var vpnManager: NETunnelProviderManager = NETunnelProviderManager()
private func initVPNTunnelProviderManager() {
NETunnelProviderManager.loadAllFromPreferences { (savedManagers: [NETunnelProviderManager]?, error: Error?) in
if let error = error {
print(error)
}
if let savedManagers = savedManagers {
if savedManagers.count > 0 {
self.vpnManager = savedManagers[0]
}
}
self.vpnManager.loadFromPreferences(completionHandler: { (error:Error?) in
if let error = error {
print(error)
}
let providerProtocol = NETunnelProviderProtocol()
Keychain.set(self.username, value: self.password)
let passwordRef = Keychain.persistentRef(self.username)
if passwordRef == nil {
print("Failed to query password persistent ref")
}
providerProtocol.username = self.username
providerProtocol.passwordReference = passwordRef
providerProtocol.serverAddress = self.serverAddress
self.vpnManager.protocolConfiguration = providerProtocol
self.vpnManager.localizedDescription = "NEPacketTunnelVPNDemoConfig"
self.vpnManager.isEnabled = true
if self.vpnManager.protocolConfiguration?.proxySettings == nil {
self.vpnManager.protocolConfiguration?.proxySettings = NEProxySettings()
}
self.vpnManager.saveToPreferences(completionHandler: { (error:Error?) in
if let error = error {
print(error)
} else {
print("Save successfully")
}
})
})
}
}
@IBAction func connectAction(_ sender: Any) {
print("Go!")
self.vpnManager.loadFromPreferences { (error:Error?) in
if let error = error {
print(error)
}
if ((sender as AnyObject).title(for: .normal) == "Connect") {
do {
try self.vpnManager.connection.startVPNTunnel()
} catch {
print(error)
}
} else {
self.vpnManager.connection.stopVPNTunnel()
}
}发布于 2017-05-27 02:58:19
我不确定你说的“personal VPN使用相同的设置进行连接”是什么意思。
在这种情况下,如果你停留在连接状态。有两种最有可能的可能性:
1)您的网络扩展没有调用完成处理程序
- (void)startTunnelWithOptions:(NSDictionary *)options completionHandler:(void (^)(NSError *))completionHandler完成处理程序让OS知道隧道已启用
2)您的应用程序未订阅NSNotification.Name.NEVPNStatusDidChange.。结果VPN启动了,但应用端并不知道
https://stackoverflow.com/questions/43217167
复制相似问题