iOS:有些应用程序似乎绕过了NEPacketTunnelProvider.如何执行



我正在开发一个NetworkExtension,它使用NEPacketTunnelProvider来提供类似VPN的隧道,这样我就可以修改流量。

这基本上适用于我迄今为止尝试过的所有应用程序,但Facebook Messenger似乎可以忽略它。我首先看到流量通过隧道,应该被屏蔽(用于测试(,但随后消息还是成功发送了。

对我来说,这表明Messenger首先要通过隧道,当它不起作用时,它会有某种退路。无论我使用Wifi还是手机数据,都会发生这种情况。起初,我认为当WiFi不工作时,它可能会以某种方式回退到蜂窝网络,但即使我在iOS级别禁用了蜂窝网络,Messenger在隧道处于活动状态时仍然可以工作。

我尝试获取所有系统路由(即IP和掩码(,并在NEIPv4Settings上将它们手动设置为includedRoutes,但这没有效果。

这看起来信使真的绕过了VPN隧道吗?或者可能有其他事情在起作用?

到目前为止,我基本上已经尝试了所有的配置组合,似乎没有任何东西会以任何方式影响Messenger。Signal、Instagram、YouTube等应用程序可以通过隧道成功切断网络。

编辑:在苹果官方论坛上找到了这个:https://developer.apple.com/forums/thread/122330

实际上Facebook Messanger向iOS中的所有活动界面发送流量。当移动数据从设置中被禁用时,它甚至通过蜂窝发送taroffice。

编辑2:我尝试了新的iOS 14配置选项includeAllNetworks,它似乎适用于Messenger,但不知何故,它扰乱了Signal或WhatsApp等其他应用程序。

当我没有打开此标志时,Signal会打开我的VPN,我可以看到它的流量,但当我启用此标志时Signal不会发送消息,也不会接收消息。

应用程序可以使用低级别的API,并通过某些接口强制流量(例如使用绑定(,然后走出您的VPN。

强制使用VPN的方法是在您的VPN配置上启用标志includeAllNetworks-

manager.protocolConfiguration!。includeAllNetworks=真正的

最新更新