Malahan qaldan ayaa ah in app-ka VpnService u rogro switsh nidaamka iyo in telefoonka uu ka dib ilaalinayo. Waxa dhab ahaan dhaca ayaa ka cidhiidhi ah: app-ku wuxuu weyddiistaa oggolaansho, wuxuu dhisaa interface, wuxuu akhriyaa oo qoraa baakadaha isagoo maraya deskriptor fayl, wuxuuna soo celiyaa interface-ka marka uu istaago. Hal tunnel oo noocan ah oo keliya ayaa noolaan kara waqti kasta, nidaamkuna wuu qaadan karaa isagoo aan weyddiin. Inta badan habdhaqanka jahawareerka ah ee dadku u nisbeeyaan borotokoolka waxay ka timaaddaa qaabkaas lahaanshaha.

U tixgeliso kasta oo ka mid ah isbeddelka meertada nololeed qayb ka mid ah naqshadda, ma aha kiis gebi ahaan.

Khuraafaad: app-ku wuxuu shidaa VPN-ka telefoonka

Qulqulka wuxuu ka bilaabmaa VpnService.prepare(), kaas oo soo celiya Intent ay tahay in isticmaaluhu aqbalo, wuxuuna sii socdaa establish(), kaas oo weli ku guuldarraysan kara sababo aan app-ku xakameyn. Dhisidda tunnel labaad waxay joojisaa interface-kii hore waxayna beddelkaa ogeysiiska nidaamka. Meel kasta oo taxanahaas ka mid ah app-ku ma leh switsh qalabka oo dhan; wuxuu leeyahay deskriptorka la siiyay iyo baakadaha ku soo dhaca. Xitaa ogeysiiska joogtada ah waxaa iska leh nidaamka, ma aha naqshadda app-ka.

Maaddaama interface-ka la bixiyo oo aan la qabsan, macmiil kale ayaa qaadan kara booska wakhti kasta. App-ku wuxuu taas ku ogaadaa iyada oo loo marayo dib-u-wicid, ma aha qiyamka soo noqodka.

Joojinta khasabka ah ee app-ka waxaa laga arkaa guddiga ogeysiiska isla sababtaas: nidaamku wuxuu soo sheegaa waxa uu bixiyay, ma aha waxa app-ku doortay in uu muujiyo.

Khuraafaad: oggolaanshaha hal mar ayaa la bixiyaa

Marka nidaamku tunnel-ka u gudbiyo macmiil kale, wuxuu u diraa macaamil laabasho binder-ka uu fasalka aasaasiga ah ka soo celiyo onBind(). App-ka beddela binder-kaas midkiisa waa in uu isagu gudbiyaa macaamilka laabashada, haddii kale VpnService.onRevoke() waligiis ma kici doono adeeguna wuxuu sii wadaa qorista deskriptor aan hadda jirin. Isticmaaluhu sidoo kale wuu ka noqon karaa oggolaanshaha, nidaamkuna wuu joojin karaa adeegga inta lagu jiro dib-u-bilow ama dib-u-xiriirka had iyo jeer shidan.

Ka shaqaynta arrintan waa shaqo cad ma aha sadar log: jooji akhrinta deskriptorka, xir, nadiifi calanka xiriirka oo u sheeg isticmaalaha xaaladda uu ku jiro. Kadib go'aan ka gaar haddii app-ku dib u dhisayo, mar kale weyddiinayo ama sugayo, sababtoo ah qaabeynta had iyo jeer shidan nidaamku isagu wuu soo celin karaa adeegga.

App-ka u qaata laabashada si ka duwan xaalad oo ah mid gaar ah wuxuu soo sheegi doonaa in uu xiran yahay inta baakad kasta oo uu qoro la tuurayo, taasina waa habka ugu xun ee guuldarada ee suurtogal ah qalabka asturnaanta.

Khuraafaad: interface-ku wuxuu kuu shaandheeyaa taraafikada

Waxa soo gaadha waa IP ceyriin. Qabashada ama shaandhaynta macneheedu waa falanqaynta madaxyada IP, TCP, UDP iyo IPv6, dabagalka qulqulka iyo dib u qorista jawaabaha deskriptorka, taas oo app-ka qabashada ka dhigaysa stack shabakadeed yar ma aha fududayn nidaam. protect() wuxuu u jiraa in socket-ka gaadiidka app-ka uu ka gudbo tunnel-kiisa halkii uu isu qaban lahaa, wuxuuna soo celiyaa qiime boolean u qalma hubinta socket kasta oo la abuuray ka dib markii tunnel-ku kor u kaco.

Liisaska app-yada la oggolaaday iyo kuwa la mamnuucay ee dhiseha ayaa go'aamiya yaa taraafikadiisa galo interface-ka. Ma siiyaan gelitaan xogta ka baxsan baakadaha IP ee interface-ku qaado, mana jiro API soo bandhiga tunnel-ka macmiil kale ama taxaa profiles VPN-ka nidaamka. Awoodaha shabakadu waxay sheegi karaan in shabakad tahay gaadiid VPN, laakiin ma aha yaa tunnel-ka leh.

Taas ayaa sabab u ah in su'aalaha xaaladda ee app-yada kale ay helaan jawaabo iskhilaafsan: macluumaadka si fudud looma soo bandhigin habkaaga.

Waxa meertada nololeed dhab ahaan u baahan tahay

La soco xaaladaha aad xakameyso: diyaarsan, la aasaasay, la laabtay, la joojiyay. Dib-u-xiriirku waa in uu ahaadaa kala-dirid kadibna aasaasid, isagoo leh hal milkiile deskriptorka iyo socket-ka gaadiidka, sababtoo ah laba qayb oo u tartamaya aasaasidda waxay ku dagaallami doonaan hal boos oo bannaan. Bilowga gadaal waa xaddidan yahay Android-ka casriga ah, sidaas darteed baahinta boot ma aha dammaanad; isticmaal adeeg hore oo leh ogeysiiskiisa meesha heerka API uu u oggolaado.

Diiwaangeli isbeddelka ma aha oo kaliya xaaladda ugu dambeysa, oo hay mishiinka xaaladda mid yar oo ku filan in la tijaabiyo waddo kasta. Xaalad aadan tijaabada ku gaari karin waa xaalad aad ku kulmi doonto goobta iyada oo aan log lahayn.

Ku tijaabi meertada nololeed qalab

Emulators waxay been abuuri karaan xiriirka laakiin ma aha waddada oggolaanshaha iyo laabashada si lagu qanci karo, sidaas darteed ku socodsii kuwani qalab dhab ah oo lagu rakibay macmiil VPN labaad si uu booska u xado.

adb shell dumpsys connectivity | grep -i -A3 vpn
adb shell dumpsys activity services | grep -i -A2 vpnservice
adb logcat -s VpnService:V AndroidRuntime:E
adb shell am force-stop com.example.vpnapp

Bilow tunnel-ka, xaqiiji ogeysiiska iyo interface-ka, kadib ku xir macmiilka kale oo fiiri haddii dib-u-wicidka laabashada uu socdo iyo haddii xaaladdu nadiifto. Jooji app-ka si khasab ah oo hubi haddii wax weli soo sheegaan deskriptor nool.

Ku celi taxanaha ka dib dib-u-bilow had iyo jeer shidan, sababtoo ah waddadaas way ka duwan tahay xiriirka isticmaaluhu bilaabay. Ma raadineyso calaamad cagaar ah ee waxaad raadineysaa caddayn in app-ku joojiyay isticmaalka deskriptor aan isaga lahayn.

Maqaallo la xiriira