iOS 在没有远程服务器的情况下实现 NETunnelProviderProtocol

whe*_*kie 5 vpn ios ios-extensions

我正在尝试使用 iOS 的 NetworkExtension 框架实现类似于iOS 的 Charles 的数据包嗅探器。

客观的

所以,这是一个很大的目标,我现在将其分解为一小部分:我想os_log从我的NEPacketTunnelProvider(图中底部的方框)中看到

在此输入图像描述

到目前为止我做了什么

  1. 我已经在 PacketTunnel 类型上创建了一个 NetworkExtension 目标。这是标题为“NEPacketTunnelProvider”的图中第三个框中的代码片段。
  2. 我在 XCode 中添加了“应用程序组”、“个人 VPN”和“网络扩展”功能。

问题

我正在 Console.app 中查看 的输出os_log("STARTING TUNNEL!!!!")。当我加载配置并调用 时startVPNTunnel(),为什么我的 TunnelProvider 代码从未被调用?

我已经startVPNTunnel()通过在代码中放置断点来验证正在调用该函数。

Jor*_*son 4

网络扩展进程无法启动的原因有很多:

  1. 在您尝试启动 VPN 之前,我会在 Xcode 中放置一个断点并附os_log("STARTING TUNNEL!!!!")加到您的网络扩展进程Debug -> Attach to Process by PID or Name...
  2. 网络扩展必须扩展包含应用程序的捆绑包 ID。例如,如果包含的应用程序是,com.example.vpn那么网络扩展可能是com.example.vpn.tunnel
  3. 确保您的网络扩展分别Info.plist包含NSExtension字典 withNSExtensionPointIdentifierNSExtensionPrincipalClasscontainscom.apple.networkextension.packet-tunnel以及您的NEPacketTunnelProvider类(例如$(PRODUCT_MODULE_NAME).PacketTunnelProvider)。
  4. 数据包隧道提供商网络扩展权利是否同时应用于包含的应用程序和网络扩展?
  5. 如果您正在实施数据包隧道提供商,则您不希望启用该Personal VPN权利。