在android中检测VPN背后

Ali*_*Ali 5 vpn android android-intent

如果流量通过VPN而不使用意图连接到VPNService,如何以编程方式检测.有系统调用吗?

Chr*_*ian 7

这有效:

private boolean checkVPN() {
    ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
    return cm.getNetworkInfo(ConnectivityManager.TYPE_VPN).isConnectedOrConnecting();
}
Run Code Online (Sandbox Code Playgroud)

  • 不起作用。我用过这个 /sf/answers/2469236591/ (2认同)

Phi*_*hil 1

Android 操作系统知道 VPN 连接何时处于活动状态(因为它在 VPN 连接期间在状态栏中显示一个图标),但没有公共 API 方法(将出现在 VpnService 上)来检查活动状态联系。

出现两种解决方案。如果您正在处理已知网络拓扑的特定情况,请运行“ping”来查看特定 IP 地址是否可用 - 使用System.exec。ping 命令存在于带有库存 ROM 的 Android 设备上,我将其用作解决方案的一部分,以提供数据连接状态的更精细视图(IP 地址未分配、IP 地址已分配但无法访问)互联网,可以访问互联网)

更好的解决方案是运行跟踪路由并分析输出。我还没有检查traceroute是否存在于带有库存ROM的Android设备上,我稍后会用更完整的信息编辑这个答案。