Sida koodhka loogu hubiyo in VPN uu ku xiran yahay Android
Android ma leh getter xaaladda xiriirka VPN. Weydii awoodaha shabakada, la soco isbeddelada gaadiidka, oo kala sooc ogolaanshaha app-ka, xaaladda qalabka iyo caddaynta server-ka.
Ma weydiin kartid Android in VPN uu ku xiran yahay. VpnService ma soo bandhigo getter xaaladda xiriirka, calaamadda furaha ee bar-ka xaaladda waxaa sawira nidaamka, ma aha wax app-kaagu akhriyi karo. Waxa aad samayn kartid waa inaad weydiiso stack-ga isku-xirka su'aal cidhiidhi ah: shabakaddee ayuu isticmaalayaa taraafikga app-kan, oo shabakaddaas ma qaaddaa gaadiidka VPN. Hagahan waxa uu maraa hubinta sida ugu fiican ee ka hortagta natiijooyinka qaladka ah, laga bilaabo amarka shell ee qalabka ilaa callback-ga aad ku dhaafto app-ka.
Hubi qalabka shell ka hor inta aanad taaban koodhka app-ka
Marka hore qaado xaalad saldhig ah. adb shell dumpsys connectivity waxa uu daabacaa shabakad kasta oo nidaamku yaqaan, block kastana waxa uu liis dhigaa gaadiidkiisa, sidaas darteed shabakad VPN waxa ay ku soo baxdaa liiskaas iyada oo VPN wadata. Akhri block-ka shabakadda caadiga ah wax kasta ka hor, ka dibna raadi shabakado kale oo qaada isla gaadiidkaas.
Laba natiijo ayaa ka jawaaba su'aalo kala duwan. In shabakad VPN ay jirto ma aha isku mid in app-kaagu isticmaalayo, qalab leh profile shaqo ama isticmaale labaad labaduba waxay noqon karaan run isku mar inta process-kaagu si toos ah ula hadlayo internet-ka. Sadarka shabakadda firfircoon ayaa go'aamiya waxa soket-yadaadu sameeyaan.
Weydii shabakadda app-ku isticmaalayo
Koodhka dhexdiisa imtixaanka awooddu waa afar sadar. Codso ACCESS_NETWORK_STATE manifest-ka, ka dibna isbarbar dhig awoodaha shabakadda firfircoon iyo gaadiidka 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);
Jawaabtu si ula kac ah ayay cidhiidhi tahay: shabakadda caadiga ah ee app-ku ma tahay VPN hadda. Wax ma sheegto VPN kee, inuu kaaga yahay, ama tunnel-ku uu gaadho dhinaca kale. U qaado true sida “taraafikgu wuxuu ku baxaa tunnel gaar ah” oo xisaabtaada gaar ahaan u hay. Boolean si aamusan saddex shay isku mar u macneeya ayaa sabab u ah in shaashadda dejinta ay VPN u sheegto mid daman inta isticmaaluhu ku dhex socdo.
Haddii taa beddelkeeda aad u baahan tahay inaad ogaato in shabakad VPN ay jirto, ku celceli cm.getAllNetworks() oo tijaabi qayb kasta oo awood ah. Labada jawaab way kala duwan yihiin qalabka ay ku socoto VPN app-ga u gaar ah oo daboola apps kale laakiin aan daboolin kaaga, kala duwanaanshahaasina waa isha inta badan warbixinnada khaladaadka ee sheegaya in app-ku aanu arkin VPN si cad u shidan.
La soco isbeddelada halkii aad si joogto ah u weydiin lahayd
Si joogto ah u weydiinta timer-ka waa qaab khaldan su'aashan, sababtoo ah isbeddelada xaaladdu waxay yimaadaan dhacdooyin ahaan. Diiwaangeli codsi u dhigma gaadiidka VPN oo u ogolow framework-ka inuu kuu sheego marka shabakad u dhiganta soo baxdo, lunto ama isbeddeldo:
NetworkRequest request = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_VPN)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
.build();
cm.registerNetworkCallback(request, callback);
Shabakad VPN waligeed ma qaaddo NET_CAPABILITY_NOT_VPN, sidaas darteed ka saaridda cad waxay diiwaangelisaa ujeeddada. Iyada la'aanteed codsigu wali wuu dhigmaa, laakiin qofka xiga ee akhrinaya koodhka waa inuu iskiis u ogaadaa.
Diiwaangelintu waxay ka tirsan tahay baaxadda u baahan indha-indhaynta, badanaa shaashad ama adeeg hore. Ka saar diiwaangelinta onStop ama onDestroy, oo ha uga tagin callback ku dheggan hawlgal hore u tagay. App aan lahayn qayb muuqata waa marti-geliye liita indha-indheeye joogto ah, callback-yada aad illowdaana waa kuwa dhiciya isbeddelka qaabeynta ka dib.
Saddexda su'aalood kala hay
Inta badan jahawareerka goobtan waxa uu ka yimaadaa in saddex hubin oo kala duwan loo arko mid. Waxay isticmaalaan API kala duwan, mid kastana wuu run noqon karaa inta kuwa kale been yihiin.
| 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 |
Sadarka saddexaad waa kan dadku isku dayaan inay ka jawaabaan macmiilka, lamana ka jawaabi karo halkaas. Sii macmiillada VPN barkooda ciwaan u gaar ah oo akhri ciwaanka isha server-ka; taasi waa caddaynta kaliya ee ka badbaadda isticmaalaha beddela tunnel-ka badhtamaha fadhiga.
Nidaamka hubinta ee meesha ka saaraya natiijooyinka qaladka ah
Koodh tusaale duug ah oo wali wareegaya waxa uu wacaa getNetworkInfo(ConnectivityManager.TYPE_VPN). Wicitaankaas waa duug oo daabacado dhowr ah waxa uu soo celiyay null xitaa marka VPN uu ku xiran yahay, taasina waa sababta qaybo badan oo la koobiyeeyay ay ugu muuqdaan kuwo jaban qalab shaqeeya. Hubinta awooddu waxay ka fogaataa dabin taas oo isku mid ku dhaqanto Android 5.0 wixii ka dambeeya. Haddii aad maamusho koodhbase wali wacaya, beddel wicitaanka halkii aad ku duubin lahayd fallback, sababtoo ah fallback-ka ayaa soo saaray jawaabta khaldan bilowgii.
Hal dariiqo gaaban ayaa u qalanta digniin. Isbarbardhigga ciwaanka guud ee ay soo sheegto adeeg dibadeed iyo ciwaanka bixidda VPN waxa uu wax caddeeyaa wadada, laakiin waxa uu ku darayaa codsi dhinac saddexaad hubin kasta, waxa uu ku xiran yahay in adeeggaasu sii shaqeeyo, oo waa la kaydin karaa ama la xannibi karaa. U hay sida baaritaan gacan ah, waligeed ha u hayn sida hubinta xaaladda gudaha app-ka.
Ku socodsii hubinta nidaamkan oo jooji tan ugu horreysa ee aan la midoobayn warbixinta isticmaalaha: liiska gaadiidka shell-ka, awoodaha shabakadda firfircoon, dhacdooyinka callback inta aad daaranaysid oo daminaysid tunnel-ka, ka dibna ciwaanka isha dhinaca server-ka. Haddii afarta oo dhan ay midoobaan oo app-ku wali si khaldan u dhaqmo, khaladku waxa uu ku jiraa mishiinka xaaladdaada, ma aha aragtida Android ee shabakadda.