我正在尝试为 iOS 创建一个 flutter+swift 应用程序,它可以确定是否存在活动的 VPN 连接,并且可以确定我的应用程序是否通过 VPN 进行通信。
目前,我正在尝试检查我的应用程序是否有任何类似的网络接口(如果有,则意味着 VPN 连接处于活动状态):
tap, tun, ppp, ipsec, ipsec0, utun1, utun2, pptp
不幸的是,这效果并不好。在某些 iOS 设备上,我看到存在现有的“ipsec”接口,但实际上没有 VPN 连接。在其他一些设备上,我发现它可以正常工作(主要是 iOS14+)。
我读到了相关内容,似乎“ipsec”接口经常用于处理 WiFi 呼叫以及在 Apple 设备之间进行通信。这是正确的吗?是否意味着这个接口是否会被设置是不可确定的(因为它可以由网络提供商或Apple生态系统控制)?
我还想知道是否有一种可靠的方法来判断设备是否具有活动的 VPN 连接,或者至少判断给定的应用程序目前是否正在使用每应用程序 VPN?
我认为我们应该检查
tun, ppp, pptp
是否有 VPN 连接。 ipsec
等可以在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;
}
https://pub.dev/packages/vpn_connection_ detector
这是我为自己使用而制作的软件包,它可以帮助您在连接 VPN 时获得网络通知 另外,还有一种静态方法可以检查一次 如果您喜欢这个包,请喜欢并分享我正在努力添加更多功能 [注意:由于一些技术问题,您可能看不到平台和发布点,我也在研究它,目前它支持所有平台,请检查,如果您发现任何需要改进的地方,请随时提出拉取请求的开放问题]