我如何知道我的应用程序是否通过VPN进行通信



我正在尝试为iOS创建一个flutter+swift应用程序,它可以确定是否有活动的VPN连接,并可以确定我的应用程序是否通过VPN进行通信。

目前,我正在尝试在我的应用程序中检查是否有这样的网络接口(如果有,则意味着VPN连接处于活动状态(:

tap, tun, ppp, ipsec, ipsec0, utun1, utun2, pptp

不幸的是,这并不奏效。在一些iOS设备上,我看到有一个现有的";ipsec";接口,但实际上没有VPN连接。在其他一些设备上,我看到它工作正常(主要是iOS14+(。

我读到了这篇文章,似乎";ipsec";该接口通常用于处理WiFi呼叫和在苹果设备之间进行通信。这是对的吗?这是否意味着无法确定是否会设置此接口(因为它可以由网络提供商或苹果生态系统控制(?

我还想知道是否有可靠的方法来判断设备是否有活动的VPN连接,或者至少判断给定的应用程序目前是否使用每个应用程序的VPN?

我认为我们应该只检查vpn连接的tun, ppp, pptp。CCD_ 2等可以在WebRTC中用于视频和语音呼叫。

Future<bool> isVpnActive() async {
bool isVpnActive;
List<NetworkInterface> interfaces = await NetworkInterface.list(
includeLoopback: false, type: InternetAddressType.any);
interfaces.isNotEmpty
? isVpnActive = interfaces.any((interface) =>
interface.name.contains("tun") ||
interface.name.contains("ppp") ||
interface.name.contains("pptp"))
: isVpnActive = false;
return isVpnActive;
}

最新更新