Indlela yokuhlola kukhodi ukuthi i-VPN ixhunyiwe yini ku-Android
I-Android ayinayo i-getter yesimo sokuxhumana kwe-VPN. Buza amakhono enethiwekhi, landela izinguquko zokuthutha, futhi wehlukanise imvume yohlelo lokusebenza, isimo sedivayisi nobufakazi besiphakeli.
Awukwazi ukubuza i-Android ukuthi i-VPN ixhunyiwe yini. VpnService ayivezi i-getter yesimo sokuxhumana, futhi isithonjana sokhiye kubha yesimo sidwetshwa uhlelo, hhayi into uhlelo lwakho lokusebenza olungayifunda. Ongakwenza ukubuza isitaki sokuxhumana umbuzo omncane: iyiphi inethiwekhi esetshenziswa ukuthutha kwalolu hlelo, futhi ingabe leyo nethiwekhi ithwala ukuthutha kwe-VPN. Lo mhlahlandlela uhamba ngokuhlola ngokulandelana okugwema imiphumela emihle yamanga, kusukela kumyalo we-shell kudivayisi kuze kufike ku-callback oyishiya igijima ohlelweni.
Hlola idivayisi kusukela ku-shell ngaphambi kokuthinta ikhodi yohlelo
Qala ngokuthola isimo esiyisisekelo. adb shell dumpsys connectivity iphrinta yonke inethiwekhi eyaziwa uhlelo, futhi ibhlokhi ngayinye ibala izinto zayo zokuthutha, ngakho inethiwekhi ye-VPN ivela nge-VPN kulolo hlu. Funda ibhlokhi yenethiwekhi ezenzakalelayo ngaphambi kwanoma yini enye, bese ufuna ezinye izinethiwekhi ezithwala ukuthutha okufanayo.
Imiphumela emibili iphendula imibuzo ehlukene. Ukuba khona kwenethiwekhi ye-VPN akufani nokuthi uhlelo lwakho luyisebenzisa, futhi kudivayisi enephrofayela yomsebenzi noma umsebenzisi wesibili kokubili kungaba yiqiniso ngasikhathi sinye ngenkathi inqubo yakho ikhuluma ngqo ne-inthanethi. Umugqa wenethiwekhi esebenzayo yiwo onquma ukuthi amasokhethi akho enza ini.
Buza ngenethiwekhi esetshenziswa uhlelo
Ekhodini ukuhlolwa kwamakhono kuyimigqa emine. Cela i-ACCESS_NETWORK_STATE kumanifesti, bese uqhathanisa amakhono enethiwekhi esebenzayo nokuthutha kwe-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);
Impendulo incane ngamabomu: ingabe inethiwekhi ezenzakalelayo yohlelo iyi-VPN manje. Ayisho lutho mayelana nokuthi iyiphi i-VPN, ukuthi ngeyakho yini, noma ukuthi umhubhe ufinyelela kolunye uhlangothi. Thatha i-true njengokuthi “ukuthutha kuphuma ngomhubhe othile” futhi ugcine ukubala kwakho ngokwahlukile. I-boolean esho ngokuthula izinto ezintathu ngasikhathi sinye iyisizathu sokuthi isikrini sezilungiselelo sibike i-VPN njengokuvaliwe ngenkathi umsebenzisi ezulazula ngayo.
Uma ngokuphambene udinga ukwazi ukuthi ikhona yini inethiwekhi ye-VPN, phinda i-cm.getAllNetworks() futhi uhlole isethi ngayinye yamakhono. Izimpendulo ezimbili ziyahlukana kudivayisi egijima i-VPN eqondene nohlelo lokusebenza ehlanganisa ezinye izinhlelo kodwa hhayi olwakho, futhi lowo mehluko uwumthombo wemibiko eminingi yamaphutha ethi uhlelo alunayo i-VPN ebonakala iculile.
Landela izinguquko esikhundleni sokubuza njalo
Ukubuza njalo ngesibali sikakhathi akusona isimo esifanele salo mbuzo, ngoba izinguquko zesimo ziza njengezehlakalo. Bhalisa isicelo esihambisana nokuthutha kwe-VPN bese uvumela uhlaka ukuba lukutshele lapho inethiwekhi ehambisanayo ivela, inyamalala noma ishintsha:
NetworkRequest request = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_VPN)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
.build();
cm.registerNetworkCallback(request, callback);
Inethiwekhi ye-VPN ayikaze ithwale i-NET_CAPABILITY_NOT_VPN, ngakho ukususa ngokusobala kubhalisa inhloso. Ngaphandle kwalokho isicelo sisahambisana, kodwa umuntu olandelayo ofunda ikhodi kufanele azitholele lokho yena.
Ukubhalisa kungokwesimo esidinga ukuqapha, ngokuvamile isikrini noma isevisi yangaphambili. Susa ukubhalisa ku-onStop noma ku-onDestroy, futhi ungashiyi i-callback ixhunywe emsebenzini osewuhambile. Uhlelo olungenaso isakhi esibonakalayo lusingathi olubi kumqaphi ongunaphakade, futhi ama-callback okhohlwayo yiwo aphahlazekayo ngemva koshintsho lwesakhiwo.
Gcina imibuzo emithathu yehlukile
Ingxenye enkulu yokudideka kulesi sikhala ivela ekuthatheni ukuhlola okuthathu okuhlukene njengokukodwa. Kusebenzisa ama-API ahlukene, futhi ngakunye kungaba yiqiniso ngenkathi ezinye zingelona iqiniso.
| 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 |
Umugqa wesithathu yiwo abantu abazama ukuwuphendula kuklayenti, futhi awukwazi ukuphendulwa lapho. Nika amaklayenti e-VPN iqoqo lawo lamakheli futhi ufunde ikheli lomthombo kusiphakeli; lowo ngubufakazi bodwa obusala lapho umsebenzisi eshintsha umhubhe phakathi nesikhathi.
Ukulandelana kokuqinisekisa okukhipha imiphumela emihle yamanga
Ikhodi yesibonelo endala esajikelezayo ibiza i-getNetworkInfo(ConnectivityManager.TYPE_VPN). Lelo calli seliphelelwe yisikhathi, futhi kwezinguqulo ezimbalwa lalibuyisela i-null ngisho ngenkathi i-VPN ixhunyiwe, yingakho iziqeshana eziningi ezikopishiwe zibonakala ziphukile kudivayisi esebenzayo. Ukuhlolwa kwamakhono kugwema lolo gibe futhi kuziphatha ngendlela efanayo kusukela ku-Android 5.0 kuya phambili. Uma ugcina isisekelo sekhodi esisayibiza, shintsha ikholi esikhundleni sokuyifaka ku-fallback, ngoba i-fallback yiyo eyakhiqiza impendulo engalungile ekuqaleni.
Indlela eyodwa emfushane ifanele isexwayiso. Ukuqhathanisa ikheli lomphakathi elibikwa isevisi yangaphandle nekheli lokuphuma le-VPN kuqinisekisa okuthile mayelana nendlela, kodwa kunezela isicelo senhlangano yesithathu ekuhloleni ngakunye, kuncike ekutheni leso sevisi sihlale sikhona, futhi kungagcinwa kusikhashana noma kuvinjwe. Kugcine njengokuxilonga ngesandla, hhayi njengokuhlola isimo ngaphakathi kohlelo.
Gijimisa ukuhlola ngokulandelana futhi ume kokokuqala okungavumelani nombiko womsebenzisi: uhlu lokuthutha olusuka ku-shell, amakhono enethiwekhi esebenzayo, izehlakalo ze-callback ngenkathi uvula futhi uvala umhubhe, bese kuba ikheli lomthombo ohlangothini lwesiphakeli. Uma zone zivumelana futhi uhlelo lusaziphatha kabi, iphutha lisekhiyelweni lakho lesimo, hhayi embonweni we-Android wenethiwekhi.