I-Android VpnService iyaxhumana kodwa awekho amaphakethe afinyelela kunethiwekhi
Ithuneli liphakeme futhi amakhasi asehluleka: hlola imodi yokufunda, ukuvikelwa kwesokhethi, ukusekelwa kwe-TCP kanye nohlu lwemizila ngaphambi kokusola iseva ye-VPN.
Ithuneli liyaphakama, isithonjana sokhiye siyavela, kodwa zonke izicelo kusiphequluli zisaphelelwa isikhathi. Kuhlelo lwe-VpnService le nhlanganisela ngokuvamile isho ukuthi umjikelezo wokufunda uyaphila futhi ingxenye yokuphuma iphukile, hhayi ukuthi iseva inqabile ukuxhawulana. I-Android isivele yadala isixhumi, yahambisa ithrafikhi yohlelo kuso futhi yanikeza inqubo yakho isichazi sefayela. Konke ngemva kwaleso sichazi kuyikhodi yakho, futhi ucingo olulodwa olungekho lwanele ukugwinya wonke umfula.
Uhlelo lukunikezani futhi akunikezi ini
I-establish() ibuyisela i-ParcelFileDescriptor yesixhumi se-tun. Uhlelo lubhala amaphakethe e-IP aphumayo kuso futhi lulindele ukuthi inqubo yakho iwafunde, inqume ukuthi aya kuphi futhi iwathume ngesokhethi evamile. Ngaphansi akukho ukudluliswa kwe-kernel, ngakho lapho kungekho odlayo amaphakethe ayalahlwa futhi izibalo zesixhumi azinyakazi.
Qala ngokubala esikhundleni sokuqagela. Khulisa isibali ngakho konke ukufunda okuphumelelayo futhi urekhode indawo kanye neprotokholi yamaphakethe okuqala. Uma isibali sihlala singu-zero ngenkathi ithrafikhi idalwa, iphutha lingaphezulu kwekhodi yakho yokudlulisa, okunciphisa usesho kubumiso be-builder kanye nemodi yokufunda. Uma isibali sinyakaza futhi isiphequluli sisahluleka, iphutha lisekuhambeni kokuthumela noma endleleni yokubuya.
Ukufunda okuvimba kunquma ukuthi umjikelezo unyakaza yini
I-setBlocking(true) ibeka isichazi kumodi evimbayo futhi ikhona kusukela ku-API 21. Ezinguqulweni ezindala ikhambi umsizi omncane we-JNI osusa i-O_NONBLOCK nge-fcntl kusichazi esiluhlaza.
Kumodi engavimbi lokho kufunda kubuya ngokushesha ngenani elinegethivu, futhi umjikelezo ongawunaki umphumela uzungeza i-core ngaphandle kokuhambisa ithrafikhi. Kumodi evimbayo ukufunda kulinda, okuyikho okufunwa uchungechunge lokudlulisa, kodwa ngemva kwalokho uchungechunge awusakwazi ukuphazanyiswa. Ukuvala isichazi kuyindlela esekelwayo yokwenza ukufunda kwehluleke ukuze umjikelezo uphume. Ukubulala inqubo noma ukuphazamisa uchungechunge kungashiya ukuqala okulandelayo ngesichazi esingasahambisani nesixhumi.
Funda iphakethe elilodwa ngakho konke ucingo ungene kubhafa elingana ne-MTU yesixhumi, futhi thatha u-zero noma impendulo enegethivu njengephutha, hhayi iphakethe elingenalutho.
I-protect() ngaphambi kokuthumela kokuqala, hhayi ngemva
Isokhethi ngayinye ethwala iphakethe elifakiwe kufanele ivikelwe kuqala. Isokhethi engavikelwe ilandela imithetho yomzila efanayo naweyokufaka manje, ngakho amaphakethe ayo abuyela kuthuneli futhi umjikelezo wakho wokufunda uwathatha futhi. Ithuneli libe selidlulisa okukhiphayo kwalo ngokungapheli, futhi ngaphandle kubonakala njengoxhumano oluvulekayo kodwa olungaphenduli.
Ukulandelana yi-protect, bese kuba connect noma bind, bese kuba send. Ukushaya i-protect ngemva kwe-connect kungashiya isinqumo somzila sangaphambili, ngakho isokhethi iqhubeka isebenzisa indlela engalungile noma ucingo lubuyisele i-true. Hlola i-boolean ebuyiswayo futhi wehluleke ngokuzwakalayo uma iyi-false, esikhundleni sokungena ekuthumeleni okungeke kusebenze.
Iphutha lemvume elivela ku-sendto kusokhethi engakaze ithinte i-protect() wuphawu olujwayelekile laleli phutha.
Isibonelo se-UDP asithwali i-HTTPS
Isibonelo sokudlulisa esikopishwa yizifundo eziningi sibhekana ne-UDP kuphela. I-TCP idinga ukuxhawulana, izinombolo zokulandelana, iziqinisekiso kanye nokuthumela kabusha, futhi umjikelezo okopisha umthwalo phakathi kwesichazi se-tun nesokhethi awukunikezi lokho. Yingakho umbuzo we-DNS nge-UDP ungadlula ngenkathi zonke izicelo ze-HTTPS zihlala phansi. Yenza isitaki se-TCP endaweni yomsebenzisi noma nikeza ukuxhumana ku-proxy yasendaweni eqeda i-TCP kudivayisi futhi idlulise umfula.
Hlola ukwehlukaniswa ngaphambi kokubhala kabusha noma yini: thumela umbuzo owodwa we-UDP futhi uvule uxhumano olulodwa lwe-TCP kusisetshenziswa esifanayo. Uma indlela ye-UDP isebenza futhi indlela ye-TCP ihla nge-SYN yokuqala, ikhodi yokudlulisa iyinkinga hhayi iseva. Lokho kuqhathanisa okukodwa konga isikhathi esiningi esichithwa ukufunda amalogi eseva angenalutho olusizayo.
Uhlu lwemizila nezihlungi ngohlelo ngakunye kunciphisa lokho okubonayo
I-addAddress, addRoute ne-addDns zinquma ukuthi uhlelo luthumelani kuthuneli. Indawo engaphandle kohlu lwemizila ayifinyeleli isichazi sakho, ngakho akukho inani lomqondo wokudlulisa oluyolungisa lokho. Rekhoda izingcingo ze-builder ozenzayo futhi uziqhathanise namakheli uhlelo oluzama ngempela ukuwafinyelela.
Ukukhetha ngohlelo ngakunye kunomkhawulo waso: i-addAllowedApplication ne-addDisallowedApplication zidinga i-API 21, futhi ezinguqulweni ezindala lezo zindlela azikho nhlobo. Idizayini ehlunga ngephakethe ayikwazi ukusebenza lapho.
Ukusetha kabusha kushiya izichazi ezindala
Ucingo olusha lwe-establish() lubuyisela isichazi esisha futhi luvala isixhumi sangaphambili. Isichazi esidala asisekho ngokusemthethweni, ngakho uchungechunge olusavimba kuso luthola iphutha, futhi amasokhethi enzelwe indlela endala kungase kudingeke ashintshwe. I-onRevoke iyimpendulo yokubuyisela yethuneli ethathwe umsebenzisi noma uhlelo. Ukugcina umjikelezo wokuphila kumnikazi oyedwa, ovimba umfundi ngaphambi kokusetha kabusha, kuvimbela izimo eziningi zokuxhumeke-kodwa-zifile.
Funda iphutha ngalinye ngokwesinyathelo elikuso. Ukusethwa kabusha koxhumano okuvela ku-recvfrom kusho ukuthi ingxenye ekude yavala ngenkathi ikhodi yakho isafunda. Iphutha lekheli elingalungile likhomba ekuhlaziyweni kwekhanda noma iphutha le-offset, hhayi kunethiwekhi.
Ukulandelana komsebenzi: imodi evimbayo ivuliwe, iphakethe elilodwa ngakho ukufunda, ikhanda lihlaziyiwe, isokhethi ivikelwe, umthwalo uthunyelwe, ukuvala okuhlanzekile ekunikezeleni kanye nohlu lwemizila olugubha indawo.