Orientação gerada a partir de informações públicas. Apenas para referência.
Um pacote Flutter que detecta conexões de VPN no Android, iOS, macOS, Windows e Linux usando APIs nativas da plataforma. Ele fornece um fluxo em tempo real das mudanças no status da VPN e suporta verificações únicas para determinar a conectividade atual. Projetado para aplicativos que precisam monitorar ou responder ao uso de VPN, como ferramentas de segurança, aplicações conscientes de rede ou serviços focados na privacidade. O pacote garante detecção confiável entre plataformas com configuração mínima.
Aplicativos que exigem insights de conectividade em tempo real
Desenvolvedores direcionados a múltiplas plataformas
Ferramentas que precisam detectar o uso de VPN
Considerações
Requer permissões específicas da plataforma
Pode não detectar todos os VPNs personalizados ou de terceiros
O comportamento pode variar levemente entre plataformas
Limitado à detecção de estados ativos de VPN, não configurações detalhadas
Depende da confiabilidade da implementação nativa
README original
Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.
VPN Connection Detector
The most accurate VPN detection package for Flutter — with native iOS & Android implementations that detect both system-configured VPNs and third-party VPN apps like NordVPN, ExpressVPN, ProtonVPN, and more.
Why This Package?
Most VPN detection solutions only check for system-configured VPNs, missing the majority of users who use third-party VPN apps. This package uses platform-native APIs to detect VPNs with ~95% accuracy:
// Check if VPN is currently activebool isVpnConnected = awaitVpnConnectionDetector.isVpnActive();
if (isVpnConnected) {
print('VPN is connected');
} else {
print('VPN is not connected');
}
Real-time VPN Status Stream
final vpnDetector = VpnConnectionDetector();
// Listen to VPN status changes
vpnDetector.vpnConnectionStream.listen((state) {
switch (state) {
caseVpnConnectionState.connected:
print('VPN connected');
break;
caseVpnConnectionState.disconnected:
print('VPN disconnected');
break;
}
});
// Don't forget to dispose when done
vpnDetector.dispose();
Get Detailed VPN Information
final info = awaitVpnConnectionDetector.getVpnInfo();
if (info != null && info.isConnected) {
print('VPN Connected');
print('Interface: ${info.interfaceName}'); // e.g., 'utun3', 'tun0'print('Protocol: ${info.vpnProtocol}'); // e.g., 'WireGuard', 'IKEv2'
}
Access Current Cached State
final vpnDetector = VpnConnectionDetector();
// Get the last known state (may be null if not yet determined)final currentState = vpnDetector.currentState;
print('Current state: ${currentState?.name ?? "unknown"}');
API Reference
VpnConnectionDetector
Method/Property
Type
Description
isVpnActive()
static Future<bool>
One-time check if VPN is active
getVpnInfo()
static Future<VpnInfo?>
Get detailed VPN information
vpnConnectionStream
Stream<VpnConnectionState>
Real-time status stream
currentState
VpnConnectionState?
Last known VPN state
dispose()
void
Clean up resources
VpnConnectionState
enumVpnConnectionState {
connected, // VPN is currently connected
disconnected, // VPN is currently disconnected
}
Version 2.0 introduces native platform support with a cleaner API:
// v1.x (still works)final isActive = awaitVpnConnectionDetector.isVpnActive();
final detector = VpnConnectionDetector();
detector.vpnConnectionStream.listen((state) { ... });
// v2.0 (new features)final info = awaitVpnConnectionDetector.getVpnInfo();
print('Protocol: ${info?.vpnProtocol}');
Breaking changes:
Minimum iOS version: 12.0
Minimum Android SDK: 21
Removed web platform support (not possible to detect VPN in browsers)
How It Works
iOS
VPN detection: Uses CFNetworkCopySystemProxySettings to inspect the __SCOPED__ dictionary, which only contains active VPN network interfaces — this reliably detects both system-configured VPNs and third-party apps like NordVPN, ExpressVPN, ProtonVPN, Surfshark, etc.
Real-time monitoring: Uses NWPathMonitor to detect network changes and re-evaluate VPN status
App Store safe: Does not use NEVPNManager or any APIs that require the Network Extension entitlement
Android
Uses ConnectivityManager with NetworkCapabilities.TRANSPORT_VPN for accurate VPN detection on API 23+. This detects all VPN connections regardless of the VPN app used.
Desktop (Fallback)
Inspects network interface names for common VPN patterns (tun, tap, ppp, wireguard, etc.).
Contributing
Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.
License
This project is licensed under the MIT License - see the LICENSE file for details.