我正在努力遵循Apple提供的example of SimpleTunnel。
我尝试跟踪他们如何进行自定义调用。
但是,我无法将connect
按钮操作与启动新隧道之间的关系链接起来。
我尝试使用PacketTunnelProvider
跟踪它,但没有成功。
我知道他们是覆盖课程。我无法找到整个VPN连接的起点。
我的目标是创建一个SSL VPN隧道。
答案 0 :(得分:6)
在询问Apple和一些反复试验之后,我终于可以触发扩展部分了。
先决条件:(网络扩展权限)
通过
触发扩展程序NEVPNConnection * conn = [经理连接];
NSError * connError;
[conn startVPNTunnelWithOptions:settingsDict andReturnError:& connError];
使用以下步骤进行调试
(1)Build&运行应用程序 (2)停止应用程序 (3)调试>通过PID或名称附加到流程>输入“PacketTunnel” (4)从iPhone屏幕启动应用程序,您可以调试扩展程序
希望我所经历的小步骤可以帮助其他人开始。 但是,还有更多的问题,我需要检查!
答案 1 :(得分:1)
示例应用程序和数据包隧道提供程序作为单独的进程运行。示例应用程序称为容器应用程序,数据包隧道提供程序作为app扩展运行。这两个组件使用IPC进行通信。
在示例应用程序中,只要启用了连接切换按钮,就会调用startVPNTunnel()API,操作系统将启动数据包隧道提供程序,后者又调用覆盖的方法startTunnelWithOptions()。这就是您开始连接VPN服务器的地方。 要回答您的问题,请将connect操作链接到调用startVPNTunnel()的方法,该方法又会触发数据包隧道提供程序。如果没有容器应用程序,则无法直接调用启动数据包隧道提供程序。 同样适用于停止VPN隧道
希望这个答案可以帮助你
答案 2 :(得分:0)
如果您询问SimpleTunnel应用程序中的连接/启用按钮,则startVPNTunnel()是StatusViewController.swift文件的startStopToggled()方法中使用的调用
如果您询问扩展如何处理vpn连接启动(配置完成后),则OS网络系统会根据隧道的配置方式调用PacketTunnelProvider.swift中的startTunnelWithOptions()。例如:对于此隧道启用了按需,OS将在网络活动时尝试设置/启动隧道。如果没有,操作系统将尝试启动隧道,当你转到设置| VPN并尝试打开配置。这与iOS8个人vpn连接类似。