Agent skill · software engineering · aradotso
vpn-detector-android
vpn-detector-android — an agent skill for coding agents.
Why this skill is useful
Adds executable detection scripts for VPN usage on Android that are not commonly found in public documentation.
What it needs
Requires android-sdk installed locally. About 4k tokens when loaded. Last updated 2026-07-09. 70 stars on the source repository.
What this skill does
app/ src/main/java/com/cherepavel/vpndetector/ VpnDetector.kt # Core detection logic InterfaceDetector.kt # Native/Java network interface inspection PackageDetector.kt # VPN app enumeration via PackageManager MainActivity.kt # UI / demo activity src/main/res/ AndroidManifest.xml bash git clone https://github.com/cherepavel/VPN-Detector.git xml <uses-permission android:name="android.permission.ACCESSNETWORKSTATE" /> <uses-permission android:name="android.permission.QUERYALLPACKAGES" /> kotlin import android.content.Context import android.net.ConnectivityManager import android.net.NetworkCapabilities fun isVpnActive(context: Context): Boolean { val cm = context.getSystemService(Context.CONNECTIVITYSERVICE) as ConnectivityManager val network = cm.activeNetwork ?: return false val caps = cm.getNetworkCapabilities(network) ?: return false return caps.hasTransport(NetworkCapabilities.TRANSPORTVPN) } kotlin fun isVpnActiveOnAnyNetwork(context: Context): Boolean { val cm = context.getSystemService(Context.CONNECTIVITYSERVICE) as ConnectivityManager return cm.allNetworks.any { network -> cm.getNetworkCapabilities(network) ?.hasTransport(NetworkCapabilities.TRANSPORTVPN) == true } } kotlin import java.net.NetworkInterface fun detectVpnInterfaces(): List<String> { val vpnPrefixes = listOf("tun", "wg", "ppp", "tap", "ipsec", "utun") return try { NetworkInterface.getNetworkInterfaces() ?.toList() ?.filter { iface -> iface.isUp && vpnPrefixes.any { prefix -> iface.name.startsWith(prefix) } } ?.map { it.name } ?: emptyList() } catch (e: Exception) { emptyList() } } fun hasVpnInterface(): Boolean = detectVpnInterfaces().isNotEmpty() kotlin import android.content.Context import android.content.pm.PackageManager val knownVpnPackages = listOf( "com.expressvpn.vpn", "com.nordvpn.android", "com.privateinternetaccess.android", "com.surfshark.vpnclient.android", "org.torproject.android", "com.protonvpn.android", "com.mullvad.vpn", "com.wireguard.android", "net.openvpn.openvpn", "com.stron …
How to use it
Reference it in AdaL, Claude Code, Cursor or any coding agent — nothing to install:
@skills aradotso/vpn-detector-android