A aplicación do teléfono e o servidor remoto parten de feitos distintos, e ningún pode tomar prestados os do outro. A aplicación pode preguntar ao sistema operativo pola rede que usa, mentres que o servidor só sabe o que chega pola conexión. Executar o seu propio punto de saída reescribe o segundo e deixa o primeiro intacto. Cal dos dous responde á súa pregunta depende da pregunta mesma.

Dous puntos de observación, dous tipos de proba

A proba local describe o dispositivo. Abrangue a interface que transporta o tráfico, o transporte que informa a plataforma e aquilo que a aplicación que chama pode consultar. A proba remota describe a conexión: enderezo de orixe, protocolo, tempos e todo o que a aplicación decida enviar. Ningún punto de observación é un superconxunto do outro.

Mesturar os dous produce afirmacións que soan exactas e non se poden comprobar. Un marcador demostra algo sobre un obxecto de rede do dispositivo, non sobre como un servizo remoto clasifica a petición.

Antes de discutir sobre a detección, anote a que punto se refire a pregunta. Trátase de se unha aplicación concreta pode saber que un túnel está activo, ou de se un servizo pode inferir de onde veu a petición? Son investigacións separadas, e a resposta a unha non di nada sobre a outra.

Que pode informar unha interface local de plataforma

Android ofrece un marcador concreto. O obxecto NetworkCapabilities pode informar TRANSPORT_VPN, e hasTransport comproba se ese transporte está presente no obxecto. A aplicación obtén o obxecto do servizo de conectividade e léoo, suxeito ao permiso de estado de rede.

O resultado é información local da plataforma, non unha consulta aos rangos de enderezos dun provedor. Describe a rede que usa a aplicación que chama.

Dous límites importan. Unha regra de túnel dividido que exclúe unha aplicación pode dar no mesmo teléfono unha resposta distinta da que ve un compañeiro, porque a aplicación pode estar ligada noutro lugar. O marcador tamén existe porque o sistema operativo modela interfaces VPN, non porque o recolla unha aplicación concreta. Se unha aplicación le o campo, o reenvía ou o ignora é unha propiedade desa aplicación. O seu manifesto e a súa documentación son as únicas fontes fiables para esa pregunta.

adb shell dumpsys connectivity | grep -i -m5 vpn

Que pode ver un servizo remoto

Un servidor ve o enderezo de orixe da conexión, o transporte e os tempos, e pode enriquecer o enderezo con datos de rexistro ou de encamiñamento. Tamén pode recibir todo o que envíe a aplicación, incluída a localización cando a aplicación a pide e o usuario acepta. Eses canles son separadas, e só unha se parece a unha consulta de enderezo.

Un enderezo rexistrado nun provedor de aloxamento suxire un túnel, mentres que un rexistrado nunha rede residencial suxire unha conexión doméstica. Ambos son indicios estatísticos, non feitos sobre o dispositivo.

Un enderezo residencial non sitúa a persoa nese enderezo, e un enderezo de aloxamento non nomea o operador nin o país. Un servizo que trata a inferencia como certeza ás veces equivocarase sen poder detectalo. Se o requisito é fiabilidade e non unha heurística, os datos de enderezo non poden fornecela, e un deseño que o di é máis honesto que un que oculta a conxectura.

ProbaA que respondeQue non pode mostrar
Marcador local de transporteSe este obxecto de rede é unha VPNQuen opera a saída ou onde está o dispositivo
Enderezo de orixe remotoQue enderezo chegou ao servizoSe o dispositivo tamén leva un túnel
Carga útil da aplicaciónQue elixiu enviar a aplicaciónTodo o que a aplicación non enviou

Por que unha saída autoaloxada cambia só un lado

Executar o seu propio punto de saída cambia o enderezo de orixe que observa un servizo remoto, o que pode movelo fóra dos rangos que ese servizo asocia con provedores comerciais. Non cambia nada no modelo de rede local, porque o túnel segue sendo un túnel e o sistema operativo aínda o informa.

Un lado da proba móvese; o outro queda fixo. A fenda entre ambos é onde se rompen as expectativas.

Un navegador é un terceiro caso coas súas propias interfaces e restricións. O contido web non pode ler un obxecto nativo de capacidades, e tratar unha función do sistema operativo móbil como dispoñible para unha páxina web é un erro de categoría. Se a pregunta se refire a un sitio web, estudie que pode obter realmente un sitio web en lugar de transliterar unha API de plataforma.

Decida coa pregunta que fai

Se a pregunta é se unha aplicación concreta pode observar o estado do túnel, a interface de plataforma é o lugar correcto onde mirar, e a resposta está no código e nos permisos desa aplicación. Se a pregunta é que pode inferir un servizo, os metadatos de conexión son a proba. Unha cuestión legal ou contractual non a resolve ningún dos dous.

Nomee a pregunta nunha frase antes de recoller nada. Esa frase decide que punto de observación importa e evita que a investigación derive cara a outra discusión.

Etiquete cada observación segundo a súa fonte cando a reporte, porque unha afirmación sen etiqueta non se pode revisar. Un marcador local e unha inferencia de enderezo son ambos útiles e ningún é concluínte, por iso fusionalos nun só veredicto é un erro.

Cando un servizo rexeita unha conexión autorizada, use a súa vía de revisión admitida en lugar de cambiar un axuste local para ocultar un sinal. Eliminar unha observación nunca demostra que as demais desaparecesen.

Artigos relacionados