Com llegir l'estat de la VPN i del servidor intermediari d'una aplicació de feina gestionada
Una icona de VPN en un telèfon gestionat demostra molt poc. Llegiu la xarxa activa, les seves capacitats i el servidor intermediari efectiu, i després llegiu cada nul tal com és.
Una aplicació de feina falla en un telèfon gestionat, algú mira l'interruptor de la VPN, el veu activat i declara que el camí és sa. Aquí s'aturen la majoria d'aquests diagnòstics, i és massa aviat: un transport VPN actiu no diu que les peticions d'aquesta aplicació l'hagin fet servir, i el servidor intermediari que realment s'aplica pot ser per aplicació o triat per un fitxer PAC en lloc de mostrar-se a Configuració. Comenceu per l'aplicació i el perfil concrets que esteu depurant, i després llegiu la visió que la plataforma té del camí.
Comenceu per l'aplicació i el seu perfil
Una aplicació amb insígnia de feina sol córrer en un perfil separat amb la seva pròpia política de xarxa. Un navegador personal al mateix telèfon no n'és una prova, i un resultat de l'equip d'un company amb una gestió diferent tampoc. Anoteu a quin perfil pertany l'aplicació abans de llegir res.
A Configuració, llisteu les entrades VPN configurades i anoteu qui és el propietari de cadascuna. A les compilacions de Samsung, les etiquetes del menú es mouen entre versions, així que descriviu l'entrada i no el camí fins a ella. Una entrada en gris o gestionada pertany a qui administra el dispositiu; desactivar-la com a experiment canvia el que esteu intentant mesurar i pot anar contra la política.
Llegiu l'estat que la plataforma informa
Dins d'una activitat existent a les vostres eines de suport, a l'API 23 o posterior, es pot llegir l'estat de la xarxa sense enviar ni un byte. La crida necessita el permís habitual del manifest ACCESS_NETWORK_STATE per a la lectura de capacitats.
val cm = getSystemService(android.net.ConnectivityManager::class.java) ?: return
val network = cm.activeNetwork
val caps = network?.let { cm.getNetworkCapabilities(it) }
val hasVpn = caps?.hasTransport(android.net.NetworkCapabilities.TRANSPORT_VPN)
val proxy = cm.defaultProxyCada valor respon una pregunta estreta. La xarxa activa és la xarxa predeterminada del procés que fa la crida en aquell moment. La comprovació de capacitats us diu si aquesta xarxa predeterminada té suport VPN. La crida al servidor intermediari informa del servidor HTTP predeterminat efectiu, i l'objecte retornat pot descriure tant un servidor estàtic com un script PAC.
Si necessiteu la visió per xarxa en lloc de la predeterminada, llegiu les propietats d'enllaç de la mateixa xarxa i compareu-les amb cm.getLinkProperties(network)?.httpProxy. Un servidor intermediari instal·lat per la gestió del dispositiu apareix a la crida del predeterminat i no a les propietats d'enllaç, cosa que és una manera ràpida de distingir un servidor imposat per la política d'un que ha donat la xarxa.
Guardeu la sortida al vostre canal de suport i no en un informe públic. Els noms d'amfitrió del servidor intermediari, les URL PAC i els sufixos interns revelen com la vostra organització encamina el trànsit, i cap d'ells cal per descriure la fallada.
Interpreteu cada camp de manera estreta
Una xarxa nul·la o un objecte de capacitats nul significa que l'estat de xarxa del cridador no estava disponible o va canviar durant la lectura. No vol dir que no hi hagi cap VPN. Tracteu-ho com a desconegut i torneu a llegir després que l'aplicació hagi passat a primer pla, no com un resultat negatiu.
Un transport VPN és el més feble dels positius. Qualsevol aplicació que tingui un VpnService en produeix un, incloent-hi una aplicació de filtratge local que no envia mai el vostre trànsit enlloc. Així, un valor cert diu que existeix una xarxa predeterminada amb suport VPN, no que s'hagi fet servir la sortida de la vostra organització i de cap manera que hi hagi hagut inspecció.
Un servidor intermediari predeterminat nul significa que aquesta API no informa cap servidor HTTP predeterminat per a la configuració efectiva. Descarta molt poc: una aplicació pot dur la seva pròpia configuració SOCKS, implementar el seu propi client HTTP o ser guiada per un servidor intermediari a la passarel·la que el dispositiu no conegui mai.
PAC és el cas que derrota una resposta d'un sol valor. Un script pot encaminar una destinació a través d'un servidor intermediari i enviar-ne una altra directa, de manera que dues peticions de la mateixa aplicació en un segon poden prendre camins diferents. I una aplicació que lliga els seus sockets a una xarxa triada, o que crida bindProcessToNetwork, no té cap obligació de seguir el valor predeterminat.
Què no us pot dir aquesta instantània
No és un historial. Res aquí registra quin camí va prendre la petició que falla, i una lectura correcta després de la fallada no és una prova sobre la fallada. Tampoc no és un inventari: obteniu la xarxa predeterminada del procés cridador, no una llista de les connexions privades de cada aplicació.
Tampoc no diu res sobre què passa per sobre del socket. Un intercanvi TLS que falla en un dispositiu gestionat pot ser un problema del magatzem de confiança, una discordança de pinning o un nom que el servidor intermediari rebutja, i cap d'aquests apareix en una lectura de connectivitat.
És per això que les dues meitats importen juntes: la instantània estreny on mirar, i el diagnòstic propi de l'aplicació diu què va fallar realment.
Informeu-ne en una forma que un administrador pugui fer servir
Doneu l'aplicació afectada, el perfil, la marca temporal i l'etapa exacta que va fallar: resolució de noms, connexió TCP, intercanvi TLS o un estat HTTP. Afegiu els valors de la instantània tal com es van llegir, amb els nuls escrits com a nuls i no com a cap. Anoteu si altres aplicacions del mateix perfil fallen de la mateixa manera, cosa que separa un problema d'aplicació d'un problema de camí a tot el perfil.
Després atureu-vos i deixeu que el propietari del camí respongui. No tracteu un certificat corporatiu, una adreça de servidor intermediari o una entrada VPN com a permís per treure la gestió o saltar-vos la ruta aprovada; això converteix un cas de suport en un incident de política.
El contracte del servidor intermediari predeterminat és breu i val la pena llegir-lo una vegada, perquè defineix exactament quin servidor intermediari informa la crida, i tota lectura excessiva d'aquesta instantània comença suposant que n'informa més.