Detect behind VPN in android

前端 未结 5 935
半阙折子戏
半阙折子戏 2021-01-05 22:49

How to detect programatically if traffic is going through VPN without using intent to connect to VPNService. Is there some system call?

5条回答
  •  失恋的感觉
    2021-01-05 23:02

    You can detect VPN with following code in android. Code will work in new and older version of android. Below code is in Kotlin.

        class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            if(checkVPNStatus()) {
                Log.d("VPN-RAJ", "is VPN Connected YES")
            } else {
                Log.d("VPN-RAJ", "is VPN Connected NO")
            }
        }
    
    
        private fun checkVPNStatus(): Boolean {
            val connectivityManager = this.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    
            return if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
                val network = connectivityManager.activeNetwork
                val capabilities = connectivityManager.getNetworkCapabilities(network)
                Log.d("VPN-RAJ", "in New Android Version")
    
                capabilities!= null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)
    
            } else {
                Log.d("VPN-RAJ", "in Old Android Version")
    
                connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_VPN)!!.isConnectedOrConnecting
            }
    
    
        }
    
    
    }
    

提交回复
热议问题