How to check VPN connection status on Android ICS

前端 未结 4 2097
遥遥无期
遥遥无期 2021-02-05 23:51

I\'m trying to register receiver, that will check VPN status. I have tried this: Get VPN Connection status on Android but looks like it no longer works on ICS. I have checked an

相关标签:
4条回答
  • 2021-02-06 00:37

    My solution is polling a NIC list.
    # You can get the list by executing command "ls /sys/class/net".

    If the list has "tun0", the device already has connected to VPN.

    0 讨论(0)
  • 2021-02-06 00:42

    May be you can try to poll for DNS server changes. If it has changed then VPN has connected. However, I think there could be a lot of exception to this rule.

    How do you get the current DNS servers for Android?

    0 讨论(0)
  • 2021-02-06 00:45
    for (Enumeration<NetworkInterface> en =
                 NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
                NetworkInterface intf = en.nextElement();
                if (intf.getName().contains("tun0") || intf.getName().contains("ppp0")) {
                    vpnInterface = intf;
                    break;
                }
            }
    

    For the VPNNetwork Interface

    for (Enumeration<InetAddress> en =
                     vpnInterface.getInetAddresses(); en.hasMoreElements(); ) {
                    InetAddress address = en.nextElement();
                    if (!address.isLoopbackAddress()) {
                        String ip = address.getHostAddress();
                        break;
                    }
                }
    

    and the InetAddress

    Thats everything I know by the moment now

    To check if it's up etc. maybe

    if (vpnInterface.isUp())
    

    I do have implemented a code which calls itself after a serveral time and send a message to the ApplicationHandlers

    0 讨论(0)
  • 2021-02-06 00:56

    NetworkCapabilities worked for me in API 21+. Unfortunately I haven't found a solution for 19-20. You have to loop over all existing networks and check which has VPN_TRANSPORT

    ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    Network[] networks = cm.getAllNetworks();
    
    Log.i(TAG, "Network count: " + networks.length);
    for(int i = 0; i < networks.length; i++) {
    
      NetworkCapabilities caps = cm.getNetworkCapabilities(networks[i]);
    
      Log.i(TAG, "Network " + i + ": " + networks[i].toString());
      Log.i(TAG, "VPN transport is: " + caps.hasTransport(NetworkCapabilities.TRANSPORT_VPN));
      Log.i(TAG, "NOT_VPN capability is: " + caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN));
    
    }
    
    0 讨论(0)
提交回复
热议问题