iOS 9 SimpleTunnel示例 - 启动新隧道

时间:2015-09-16 08:11:33

标签: ssl networking vpn ios9

我正在努力遵循Apple提供的example of SimpleTunnel。 我尝试跟踪他们如何进行自定义调用。 但是,我无法将connect按钮操作与启动新隧道之间的关系链接起来。

我尝试使用PacketTunnelProvider跟踪它,但没有成功。 我知道他们是覆盖课程。我无法找到整个VPN连接的起点。

我的目标是创建一个SSL VPN隧道。

3 个答案:

答案 0 :(得分:6)

在询问Apple和一些反复试验之后,我终于可以触发扩展部分了。

先决条件:(网络扩展权限)

  1. 添加新目标 - >数据包隧道提供程序
  2. 通过

    触发扩展程序
      

    NEVPNConnection * conn = [经理连接];

         

    NSError * connError;

         

    [conn startVPNTunnelWithOptions:settingsDict andReturnError:& connError];

  3. 使用以下步骤进行调试

    (1)Build&运行应用程序 (2)停止应用程序 (3)调试>通过PID或名称附加到流程>输入“PacketTunnel” (4)从iPhone屏幕启动应用程序,您可以调试扩展程序

  4. 希望我所经历的小步骤可以帮助其他人开始。 但是,还有更多的问题,我需要检查!

答案 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连接类似。