如何通过框架API或任何其他有效方法找到VPN连接的状态?

Dur*_*n.H 11 vpn android android-ndk aidl

至今:

我找到了以下解决方案

  1. 使用Broadcastreceiver

    广播接收器已从ICS弃用

  2. 使用Ping或Traceroute

    这肯定会花费很多时间而且效率不高

  3. 轮询DNS服务器更改

    这肯定会花费很多时间而且效率不高

  4. 使用ip-address

    即使根据网络连接不会花费太多时间,它也可能会有所不同

我的结论:

到目前为止,我发现的所有解决方案要么效率不高,要么不那么可靠.

我的问题:

如果VPN在Android设备中连接,那么android OS必须知道它.

是否有任何公共的android框架API来读取它,因为在本地查找是最有效和最可靠的解决方案?

有没有其他有效和可靠的方法来实现它(比如将C或C plus plus库与NDK集成)?

注意:

我也找不到OpenVPN for Android的任何自定义广播发件人/ AIDL

Ila*_*n.b 8

您可以尝试检查tun0 INTERFACE,它正在启动setup命令.

try {
    for( NetworkInterface intf : Collections.list(NetworkInterface.getNetworkInterfaces())) {

        // Pass over dormant interfaces
        if(!intf.isUp() || intf.getInterfaceAddresses().size() == 0)
            continue;

            if ("tun0".equals(intf.getName())){
                // The VPN is up
                break;
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

这也可能有效:

(Collections.list(NetworkInterface.getByName("tun0")

  • `tun0`不是唯一的选择.还有`ppp0`,我不知道哪种其他类型取决于VPN连接的类型. (2认同)