Yadda za a duba a cikin lambar ko VPN ya haɗu a Android
Android ba shi da getter na haɗin VPN. Tambayi ƙarfin cibiyar sadarwa, lura da canje-canjen jigilar bayanai, kuma ka raba izinin manhajar, yanayin na'urar da shaidar uwar garke daban.
Ba za ka iya tambayar Android ko VPN ya haɗu ba. VpnService ba ya bayyana wani getter na haɗi, kuma tsarin ne ke zana alamar maɓalli a sandar matsayi, ba wani abu da manhajarka za ta iya karantawa ba. Abin da za ka iya yi shi ne ka tambayi tarin hanyar sadarwa tambaya mafi ƙunci: wace cibiyar sadarwa ce zirga-zirgar wannan manhaja ke amfani da ita, kuma shin wannan cibiyar tana ɗauke da jigilar VPN. Wannan jagorar tana bin gwaje-gwajen a cikin tsari da ke guje wa sakamako na ƙarya, daga umarnin shell a na'urar har zuwa callback da ka bar yana gudana a manhajar.
Duba na'urar daga shell kafin ka taɓa lambar manhaja
Fara samun tushen layi. adb shell dumpsys connectivity yana buga kowace cibiyar sadarwa da tsarin ya sani, kuma kowane rukuni yana lissafin jigilarsa, don haka cibiyar VPN tana bayyana da VPN a cikin wannan jeri. Karanta rukunin cibiyar da aka saba kafin komai, sannan ka nemi wasu cibiyoyin da ke ɗauke da jigila ɗaya.
Fitoci biyu suna amsa tambayoyi daban-daban. Kasancewar cibiyar VPN ba ɗaya ba ce da ko manhajarka tana amfani da ita, kuma a na'urar da ke da bayanin aiki ko mai amfani na biyu duka biyun na iya zama gaskiya a lokaci ɗaya yayin da tsarinka ke magana da intanet kai tsaye. Layin cibiyar da ke aiki shi ne ke yanke shawarar abin da soket ɗinka ke yi.
Tambayi cibiyar da manhajar ke amfani da ita
A cikin lamba gwajin ƙarfi layi huɗu ne. Nemi ACCESS_NETWORK_STATE a cikin manifest, sannan ka kwatanta ƙarfin cibiyar da ke aiki da jigilar VPN:
ConnectivityManager cm = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
Network active = cm.getActiveNetwork();
NetworkCapabilities caps = cm.getNetworkCapabilities(active);
boolean vpnInUse = caps != null
&& caps.hasTransport(NetworkCapabilities.TRANSPORT_VPN);
Amsar da gangan ta ƙunci ce: shin cibiyar da aka saba ta manhaja VPN ce a yanzu. Ba ta ce komai ba game da wace VPN ce, ko naka ce, ko kuma tiyo ya isa ƙarshensa mai nisa. Ka ɗauki true a matsayin “zirga-zirga na fita ta wani tiyo” kuma ka riƙe lissafinka daban. Boolean da ke nufin abubuwa uku a lokaci ɗaya a shiru shi ne dalilin da allon saituna ke ƙarshe ya ba da rahoton cewa VPN a kashe yayin da mai amfani ke browsing a cikinsa.
Lokacin da kake buƙatar sanin ko akwai kowace cibiyar VPN a maimakon haka, yi maimaita kan cm.getAllNetworks() kuma gwada kowane saitin ƙarfi. Amsoshin biyu suna bambanta a na'urar da ke gudanar da VPN na kowace manhaja wanda ke rufe wasu manhajoji amma ba naka ba, kuma wannan bambanci shi ne tushen yawancin rahotannin kuskure da ke cewa manhajar ba ta ga VPN da a bayyane yake a kunne.
Lura da canje-canje maimakon yin polling
Polling a kan lokaci shi ne siffar da ba daidai ba ga wannan tambaya, domin canje-canjen yanayi suna zuwa a matsayin abubuwan da suka faru. Yi rijistar buƙata da ta dace da jigilar VPN kuma ka bar framework ya gaya maka lokacin da cibiyar da ta dace ta bayyana, ta ɓace ko ta canza:
NetworkRequest request = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_VPN)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
.build();
cm.registerNetworkCallback(request, callback);
Cibiyar VPN ba ta taɓa ɗauke da NET_CAPABILITY_NOT_VPN ba, don haka cirewar a bayyane tana rubuta niyya. Ba tare da ita ba buƙatar har yanzu tana dacewa, amma mutumin da zai karanta lambar dole ya gano hakan da kansa.
Rijista ta kasance cikin iyakar da ke buƙatar lura, yawanci allo ko sabis na gaba. Soke rijista a cikin onStop ko onDestroy, kuma kada ka bar callback a makale da aiki da ya riga ya tafi. Manhajar da ba ta da ɓangaren da ake gani ba ta da kyau ga mai lura na dindindin, kuma callbacks da ka manta su ne ke faɗuwa bayan canjin tsari.
Ka raba tambayoyi uku daban
Mafi yawan ruɗani a wannan fannin yana zuwa daga ɗaukar gwaje-gwaje uku daban-daban a matsayin ɗaya. Suna amfani da API daban-daban, kuma kowanne na iya zama gaskiya yayin da sauran ƙarya ne.
| Question | How you answer it | What a yes means |
|---|---|---|
| Did the user grant VPN consent to my app? | VpnService.prepare() returns null | Consent exists; the tunnel may still be down |
| Is the device sending default traffic through a VPN? | TRANSPORT_VPN on the active network | Something is tunneling, not necessarily your app |
| Did this request arrive through the VPN? | Source address seen by the server | Proof for that connection, nothing wider |
Layi na uku shi ne wanda mutane ke ƙoƙarin amsawa a kan client, kuma ba za a iya amsa shi a can ba. Ba da abokan cinikin VPN rumbun adireshinsu, kuma karanta adireshin asali a uwar garke; wannan ita ce kawai shaida da ke tsira lokacin da mai amfani ya canza tiyo a tsakiyar zama.
Tsarin tabbatarwa da ke kawar da sakamakon ƙarya
Tsohon misalin lamba da ke ci gaba da yaɗuwa yana kira getNetworkInfo(ConnectivityManager.TYPE_VPN). Wannan kiran ya shuɗe, kuma a cikin fitoci da yawa yana mayar da null ko da VPN ya haɗu, shi ya sa yawancin guntu-guntun da aka kwafa suke kama da karyayye a na'urar da ke aiki. Gwajin ƙarfi yana guje wa tarkon kuma yana yin ɗaya daga Android 5.0 zuwa gaba. Idan kana kula da rumbun lamba da har yanzu ke kiransa, maye gurbin kiran maimakon nade shi cikin fallback, domin fallback shi ne ya haifar da amsar da ba ta dace ba tun farko.
Wata hanya mai sauƙi ta cancanci gargaɗi. Kwatanta adireshin jama'a da wata sabis ta waje ke bayarwa da adireshin fitowar VPN yana tabbatar da wani abu game da hanyar, amma yana ƙara buƙatar wani ɓangare na uku a kowane gwaji, ya dogara da wannan sabis ɗin ya ci gaba da kasancewa, kuma ana iya adana shi a cache ko toshe shi. Ka riƙe shi a matsayin bincike na hannu, ba za a taɓa yin amfani da shi a matsayin gwajin yanayi a cikin manhajar ba.
Gudanar da gwaje-gwajen a wannan tsari kuma ka tsaya a farkon wanda bai dace da rahoton mai amfani ba: jerin jigila a shell, ƙarfin cibiyar da ke aiki, abubuwan da suka faru na callback yayin da kake kunna da kashe tiyo, sannan adireshin asali a bangaren uwar garke. Idan duk huɗun sun dace kuma manhajar har yanzu tana yin kuskure, kuskuren yana cikin injin yanayinka ba cikin ra'ayin Android game da cibiyar sadarwa ba.