首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用iOS虚拟专用网配置时,虚拟专用网隧道卡在连接状态

使用iOS虚拟专用网配置时,虚拟专用网隧道卡在连接状态
EN

Stack Overflow用户
提问于 2017-04-05 04:32:49
回答 1查看 1.2K关注 0票数 1

我正在尝试使用网络扩展来启动VPN数据包隧道,但vpn总是停留在“连接”状态。但是,personal VPN确实使用这些相同的设置进行连接。在调用startVPNtunnel之后,将调用PackTunnel扩展函数,但状态仍为Connecting

代码语言:javascript
复制
// 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()
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2017-05-27 02:58:19

我不确定你说的“personal VPN使用相同的设置进行连接”是什么意思。

在这种情况下,如果你停留在连接状态。有两种最有可能的可能性:

1)您的网络扩展没有调用完成处理程序

代码语言:javascript
复制
- (void)startTunnelWithOptions:(NSDictionary *)options completionHandler:(void (^)(NSError *))completionHandler

完成处理程序让OS知道隧道已启用

2)您的应用程序未订阅NSNotification.Name.NEVPNStatusDidChange.。结果VPN启动了,但应用端并不知道

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43217167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档