【问题标题】:How to find the status of VPN connection through framework APIs or any other efficient method?如何通过框架 API 或任何其他有效方法查找 VPN 连接状态?
【发布时间】:2014-09-11 17:14:41
【问题描述】:

到目前为止:

我找到了以下解决方案

  1. Using Broadcastreceiver

    广播接收器已从 ICS 中弃用

  2. Using Ping or Traceroute

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

  3. Polling for DNS server changes

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

  4. Using ip-address

    尽管根据网络连接不会花费太多时间,但它可能会有所不同

我的结论:

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

我的问题:

如果在安卓设备中连接了VPN,那么安卓操作系统必须知道它。

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

是否有其他有效且可靠的方法来实现它(例如将 C 或 C plus plus 库与 NDK 集成)?

注意:

我也找不到任何来自 OpenVPN for Android 的自定义广播发送者/AIDL

【问题讨论】:

  • 几个问题:您要解决的根本问题是什么?为什么你需要知道你是否在 VPN 上?您是在实施自己的 VPN,还是想在其他类型的应用程序中检查 VPN 的状态?

标签: android android-ndk vpn aidl


【解决方案1】:

你用过-VpnService

根据文档 -

Prepare to establish a VPN connection. This method returns 'null' if the VPN application 
is 'already prepared'.

从这里-

http://developer.android.com/reference/android/net/VpnService.html#prepare(android.content.Context)

 Intent intent = VpnService.prepare(getApplicationContext());
  if (intent == null) {
    // this means there is already a prepared VPN connection
  }

【讨论】:

  • 根据文档,Prepare 意味着只有一个 VPN 连接,所以如果 vpn 连接已经存在,那么它将返回 nul 如果没有,那么它将返回一个相应的对象但它总是返回 null 即使如果根本没有VPN连接。
  • 即使解决方案没有成功,但实际上是一个很好的尝试
【解决方案2】:

您可以尝试检查 tun0 INTERFACE,它是在建立命令之后启动的。

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;
            }
    }
}

这也可能有效:

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

【讨论】:

  • tun0 不是唯一的选择。还有ppp0,根据VPN连接的类型不知道还有哪些类型。
  • 修复错误后即可使用 :), if ("tun0".equals(intf.getName())){
  • @testing 你在什么设备上得到了 ppp0 ?
  • 三星 Galaxy Tab Active SM-T365
  • 有时会是“tun1”,所以我认为startWith("tun")会更合适。
【解决方案3】:

我知道答案太晚了,但我只是想弄清楚这一点,偶然发现了这个命令:

ifconfig tun0

如果 VPN 已连接或未连接,这将返回 IP address 和其他信息。

tun0: 没有这样的设备

【讨论】:

  • 这个好像要通过ADB试试,,,我能不能用java运行?
  • tun0 不是唯一的选择。还有ppp0,根据VPN连接的类型不知道还有哪些类型。
猜你喜欢
  • 2021-03-29
  • 2019-06-26
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多