iOS 在没有远程服务器的情况下实现 NETunnelProviderProtocol
iOS implementing NETunnelProviderProtocol with no remote server
我正在尝试使用 iOS 的 NetworkExtension 框架实现类似于 Charles for iOS 的数据包嗅探器。
Objective
所以,这是一个很大的目标,我现在将它分解成一个小部分:我想从我的 NEPacketTunnelProvider
(图中的底部框)中看到 os_log
到目前为止我做了什么
- 我已经在 PacketTunnel 类型上创建了一个 NetworkExtension 目标。这是标题为 "NEPacketTunnelProvider".
的图表中第三个框中的代码片段
- 我在 XCode.
中包含了 "app groups"、"personal VPN" 和 "Network extension" 功能
问题
我在 Console.app 中查看 os_log("STARTING TUNNEL!!!!")
的输出。当我加载配置并调用 startVPNTunnel()
时,为什么我的 TunnelProvider 代码从未被调用?
我已通过在我的代码中放置一个断点来验证 startVPNTunnel()
被调用。
在startVPNTunnel func中,你应该调用setTunnelNetworkSettings,然后隧道将启动,之后,你可以read/write包。
setTunnelNetworkSettings(nil) { error in
pendingStartCompletion(error)
}
您的网络扩展进程可能无法启动的原因有很多:
- 我会在
os_log("STARTING TUNNEL!!!!")
上放置一个断点,并在您尝试启动 VPN 之前通过 Debug -> Attach to Process by PID or Name...
附加到您在 Xcode 中的网络扩展进程
- 网络扩展必须扩展包含应用程序的包 ID。例如。如果包含的应用程序是
com.example.vpn
那么网络扩展可能是 com.example.vpn.tunnel
.
- 确保您的网络扩展
Info.plist
包含 NSExtension
字典,其中 NSExtensionPointIdentifier
和 NSExtensionPrincipalClass
包含 com.apple.networkextension.packet-tunnel
和您的 NEPacketTunnelProvider
class(例如 $(PRODUCT_MODULE_NAME).PacketTunnelProvider
)。
- Packet Tunnel Provider Network Extension 授权是否同时应用于包含应用程序和网络扩展?
- 如果您正在实施数据包隧道提供程序,您不想启用
Personal VPN
权利。
我正在尝试使用 iOS 的 NetworkExtension 框架实现类似于 Charles for iOS 的数据包嗅探器。
Objective
所以,这是一个很大的目标,我现在将它分解成一个小部分:我想从我的 NEPacketTunnelProvider
(图中的底部框)中看到 os_log
到目前为止我做了什么
- 我已经在 PacketTunnel 类型上创建了一个 NetworkExtension 目标。这是标题为 "NEPacketTunnelProvider". 的图表中第三个框中的代码片段
- 我在 XCode. 中包含了 "app groups"、"personal VPN" 和 "Network extension" 功能
问题
我在 Console.app 中查看 os_log("STARTING TUNNEL!!!!")
的输出。当我加载配置并调用 startVPNTunnel()
时,为什么我的 TunnelProvider 代码从未被调用?
我已通过在我的代码中放置一个断点来验证 startVPNTunnel()
被调用。
在startVPNTunnel func中,你应该调用setTunnelNetworkSettings,然后隧道将启动,之后,你可以read/write包。
setTunnelNetworkSettings(nil) { error in
pendingStartCompletion(error)
}
您的网络扩展进程可能无法启动的原因有很多:
- 我会在
os_log("STARTING TUNNEL!!!!")
上放置一个断点,并在您尝试启动 VPN 之前通过 - 网络扩展必须扩展包含应用程序的包 ID。例如。如果包含的应用程序是
com.example.vpn
那么网络扩展可能是com.example.vpn.tunnel
. - 确保您的网络扩展
Info.plist
包含NSExtension
字典,其中NSExtensionPointIdentifier
和NSExtensionPrincipalClass
包含com.apple.networkextension.packet-tunnel
和您的NEPacketTunnelProvider
class(例如$(PRODUCT_MODULE_NAME).PacketTunnelProvider
)。 - Packet Tunnel Provider Network Extension 授权是否同时应用于包含应用程序和网络扩展?
- 如果您正在实施数据包隧道提供程序,您不想启用
Personal VPN
权利。
Debug -> Attach to Process by PID or Name...
附加到您在 Xcode 中的网络扩展进程