Ilaalinta VpnService way guuldareysataa marka VPN kale horey u firfircoon
Android wuxuu u oggolaanayaa isticmaale kasta hal interface VPN. Samee hubinta prepare, establish, protect iyo lahaanshaha si isku xigta, ka dibna dooro baabi'in ama ka-reebid app kasta.
App-kaagu wuxuu wacaa VpnService.prepare, wuxuu helaa null, wuxuu dhisaa tunnel, shaandheeyaha waxuu u eg yahay mid sax ah, laakiin waxba ma gaaraan server-ka. Ama prepare wuxuu soo celiyaa Intent, isticmaaluhu wuu ogolaadaa, establish-na weli wuu guuldareystaa. Labada natiijo badanaa waxay la macne yihiin isku mid: app kale ayaa horey u leh interface VPN-ka isticmaalahan, wacitaannadaada protect-na waxay calaamadeynayaan sockets aysan tunnel-kaagu isticmaali karin. Si isku xigta u mar hubinta hoose oo ku joogso tan ugu horreysa ee guuldareysata, sababtoo ah tallaabo dambe ma hagaajin karto mid hore.
Hubi booska VPN ka hor inta aanad taaban protect
Android wuxuu isticmaale kasta siiyaa si sax ah hal interface VPN firfircoon. Kani waa qaanuun platform, ma aha fasax uu app-kaagu codsan karo, sidaas darteed laba macmiil oo labaduba raba inay noqdaan tunnel-ka ma wada noolaan karaan.
VPN had iyo jeer shidan oo loo dejiyay app kale waa kiiska ugu adag, sababtoo ah nidaamku wuxuu app-kaas ku hayaa xiriir oo wuu diidaa qabasho. Shaandheeyaha taraafikada sida AdGuard, macmiil shirkadeed ama VPN macaamiil ayaa qaban kara booska inta isticmaaluhu illoobay inuu rakiban yahay. Weydii isticmaalaha inuu furo Dejinta oo uu akhriyo gelitaanka ku qoran VPN-ka hoostiisa; magaca halkaas ku yaal waa mulkiilaha aad la tartamaysid. Ilaa gelitaankaas la gooyo ama dejinta had iyo jeer shidan la tirtiro, VpnService-kaagu ma noqon karo interface-ka.
Tallaabo 1: akhri waxa prepare soo celiyo
VpnService.prepare wuxuu ka jawaabaa hal su'aal: app-kan ma noqon karaa VPN? Wuxuu soo celiyaa null marka ogolaansho horey u jiro, iyo Intent marka isticmaaluhu weli u baahan yahay inuu ogolaado, kaas oo aad ku bilaabi doonto startActivityForResult. U qaado soo-celinta null fasax lagu sii wado, ma aha caddayn in establish guuleysan doono.
Intent intent = VpnService.prepare(context);
if (intent != null) {
startActivityForResult(intent, REQUEST_VPN);
}Haddii wadada Intent soo noqoto oo isticmaaluhu diiday, prepare wuxuu sii wadi doonaa soo celinta Intent isku dayga xiga. Diiwaangeli koodhka natiijada halkii aad ku celcelin lahayd loop, sababtoo ah ogolaansho la diiday waa go'aan isticmaale, ma aha khalad ku meel gaar ah.
Tallaabo 2: xaqiiji in interface-ku leeyahay app-kaaga
Ka dib establish, ParcelFileDescriptor aad hesho waa caddaynta lahaanshahaaga, waana mudan in la hubiyo ka hor shaqo kasta oo socket. Shaandheeye null ah ama horey loo xiray macnaheedu waa interface-ka waligiis lama abuurin, xitaa haddii aan wax ka reebban soo bixin. Isbarbardhig magaca interface-ka builder-ka iyo kan nidaamku soo sheego VPN-ka firfircoon, adigoo isticmaalaya dumpsys qalab tijaabo ah. Haddii ay kala duwan yihiin, tunnel-ka aad dhisay maaha tunnel-ka qaadaya taraafikada.
adb shell dumpsys connectivityIsku mid la'aantaas waxay sharraxaysaa icon xiriir leh oo taraafikadu dhintay. Nidaamku wuxuu muujiyaa tunnel-ka app-ka kale, halka koodhkaagu hayo shaandheeye interface uusan lahayn.
Tallaabo 3: wac protect ka hor connect
Marka interface-ku jiro, sockets-ka app-kaagu furo waxaa si caadi ah loo mariyaa tunnel-ka. Gaadiidka dibadda ma raaci karo qaanuunkaas haddii kale baakadda la duubay waxay ku noqon lahayd interface-ka, sidaas darteed VpnService protect wuxuu calaamadeeyaa socket si uu uga baxo VPN-ka oo u isticmaalo shabakadda hoose. Wacitaanku wuxuu soo celiyaa boolean, oo inaad iska indhatirto waa sida aad ku dhamaystirto socket u eg mid caafimaad qaba oo waxna qaadin.
Wac protect ka hor connect ama bind, waligaa ka dib ma aha. Ilaalintu waa inay meesha ku horeysaa ka hor inta socket-ka la xiriirin ama la xirin, sababtoo ah socket xiriir leh wuxuu horey u doortay wadadiisa oo protect dambe si lagu kalsoonaan karo ma raro. Haddii protect soo celiyo false, istaag oo mar kale hubi lahaanshaha: wuu guuldareystaa marka interface-ku aanu lahayn app-kaaga, taas oo si sax ah waqtigaas ka dhigta mid VPN kale ka tagay. Soo-celinta false waa calaamad inaad ku noqoto Tallaabo 1, ma aha inaad isku daydo isla socket-kaas.
DatagramSocket socket = new DatagramSocket();
if (!vpnService.protect(socket)) {
return;
}
socket.connect(serverAddress, serverPort);Tallaabo 4: xir geedi socod marka socket-ku adag yahay
Gaadiidka qaarkood ma aha hal socket: maktabad ayaa laga yaabaa inay furo dhowr, ama waxaa laga yaabaa inaad rabto in xiriir kasta oo ku jira geedi socod caawiye ah uu isticmaalo isla bixitaanka. ConnectivityManager.bindProcessToNetwork wuxuu geedi socodka ku xiraa shabakad la doortay, oo setProcessDefaultNetwork hore ayaa isla shaqadaas qaban jiray ka hor inta aan la duugo. Codso xiriirka hoose NET_CAPABILITY_NOT_VPN si xidhitaanku u doorto shabakadda tunnel-kaaga hoose ee aanu ahayn tunnel-ka laftiisa.
NetworkRequest request = new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
.build();Xiritaanka geedi socod ma aha VPN labaad. Wuxuu u doortaa bixitaan geedi socodkaas, taas oo faa'iido u leh gaadiidkaaga oo aan faa'iido u lahayn in laba tunnel si isku mid ah loo wado.
Hagaaji qalabka isticmaalaha, ma aha wadada koodhka
Ma jiro API u oggolaanaya laba app inay wadaagaan booska VPN, sidaas darteed hagaajintu waxay ka tirsan tahay xaaladda qalabka. Isticmaalaha sii laba wado oo cad: gooy ama tirtir had iyo jeer shidan app-ka kale si prepare-kaagu u qaato, ama fur dejinta app kasta ee app-kaas oo ka reeb app-kaaga tunnel-kiisa. Ka-reebidda waxay shaandheeyaha ku haysaa shaqeynaya wax kasta oo kale waxayna u oggolaanaysaa app-kaaga inuu isticmaalo xiriirka caadiga ah, taas oo inta badan tahay natiijada isticmaaluhu runtii rabo.
Labada wado ku qor dukumeentigaaga taageerada, sababtoo ah isticmaalayaashu marar dhif ah ayay ogaadaan app-ka leh VPN-ka. Weydii inay soo diraan magaca VPN-ka firfircoon ee Dejinta iyo natiijooyinka prepare, establish iyo protect ee logs-kaaga, oo hal daqiiqo gudaheed ayaad sheegi kartaa tallaabada guuldareysatay. Kadib ku xaqiiji taraafiko dhab ah: raadinta magac, xiriir TCP iyo hal codsi tunnel-ka, ma aha kaliya icon xiriir leh. Shaandheeye sax ah iyo tilmaame cagaar ah waxay cadeeyaan ugu badnaan lahaanshaha, waligood ma aha in gaadiidku ka badbaaday qaanuunnada marin-u-helidda.
Haddii afarta hubin ay dhammaantood gudbaan oo taraafikadu wali dhintay, lahaanshaha mar dambe maaha dhibaatadaada. U gudub marin-u-helidda iyo helitaanka server-ka, oo tijaabi isla aqoonsiga qalab aan la rakibin app VPN.