iOS 9 SimpleTunnel 示例 - 启动新隧道

Posted

技术标签:

【中文标题】iOS 9 SimpleTunnel 示例 - 启动新隧道【英文标题】:iOS 9 SimpleTunnel sample - Starting a new tunnel 【发布时间】:2015-12-12 17:08:10 【问题描述】:

我正在努力遵循 Apple 提供的example of SimpleTunnel。 我试图追踪他们是如何进行定制电话的。 但是我无法将connect 按钮操作与启动新隧道之间的关系联系起来。

我尝试使用PacketTunnelProvider 跟踪它,但没有成功。 我知道它们是覆盖类。我找不到整个 *** 连接的开始点。

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

【问题讨论】:

【参考方案1】:

示例应用程序和数据包隧道提供程序作为单独的进程运行。示例应用程序被称为容器应用程序,数据包隧道提供程序作为应用程序扩展运行。这两个组件使用 IPC 进行通信。

在示例应用程序中,只要启用连接切换按钮,就会调用 start***Tunnel() API,并且操作系统会启动数据包隧道提供程序,该提供程序反过来会调用您的覆盖方法 startTunnelWithOptions()。所以这是您开始连接到 *** 服务器的地方。 要回答您的问题,请将连接操作链接到调用 start***Tunnel() 的方法,该方法又会触发数据包隧道提供程序。没有容器应用程序,您不能直接调用启动数据包隧道提供程序。 同样适用于停止您的 *** 隧道

希望这个答案对你有帮助

【讨论】:

【参考方案2】:

在询问了苹果和一些尝试和错误之后,我终于可以触发扩展部分了。

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

    添加新目标 -> 数据包隧道提供程序

    通过

    触发扩展

    NE***Connection *conn = [管理器连接];

    NSError *connError;

    [conn start***TunnelWithOptions:settingsDict andReturnError:&connError];

    使用以下步骤进行调试

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

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

【讨论】:

自定义隧道的return err如何处理?【参考方案3】:

如果您询问的是 SimpleTunnel 应用程序中的连接/启用按钮,那么 start***Tunnel() 是 StatusViewController.swift 文件的 startStopToggled() 方法中使用的调用

如果您询问扩展如何处理 *** 连接启动(配置完成后),则 OS 网络系统会根据隧道的配置方式调用 PacketTunnelProvider.swift 中的 startTunnelWithOptions()。例如:为此隧道启用了按需,只要有网络活动,操作系统就会尝试设置/启动隧道。如果没有,操作系统将尝试启动隧道,当您转到设置|*** 并尝试打开配置时。这类似于 ios8 个人 *** 连接的东西。

【讨论】:

PacketTunnelProvider 的触发命令在哪里?我知道他们想做什么。但我无法将该功能与用户操作联系起来。其他地方没有 PacketTunnelProvider 的参考。

以上是关于iOS 9 SimpleTunnel 示例 - 启动新隧道的主要内容,如果未能解决你的问题,请参考以下文章

ios子线程怎样能开启NSTimer

Hadoop运行模式编写Hadoop集群常用脚本Hadoop集群启停脚本常用端口号说明集群时间同步时间服务器配置其他机器配置

kafka深度研究之路-kafka 与zk 集群启停脚本

SpringBoot实现动态增删启停定时任务

Proteus仿真Arduino UNO+uln2003驱动步进电机+按键启保停正反转控制

芯调查库存高启生态倒戈 小米再现供应链短板