Waxaa jira laba siyaabood oo aad ku ilaaliso in packets-ka tunnel-ku uusan galin tunnel-ka: ilaali socket-ka wareejinta, ama ka saar abka oo dhan VPN-ka. Waxay xalliyaan mashaakil kala duwan, dooqa baaxadda ballaadhan sababtoo ah waa fududahay in la xiro ayaa ah sida ababdu u lumiyaan gelitaanka shabakadda gudaha oo DNS u kala qaybsanto iyagoon ogaan. Ka bilow waxa tunnel-ka dibaddiisa ah, kadibna dooro baaxadda ugu yar ee taas gaadha.

Waxa protect() ka saaro tunnel-ka

VpnService.protect() waa wicitaan ku socda hal socket. Waxaad siisaa socket-ka ama descriptor-ka qaada tunnel-ka, Android-na wuxuu socket-kaas calaamadeeyaa si taraafikadiisu u isticmaalo shabakadda hoose halkii uu ka isticmaali lahaa interface-ka VPN. Wax kasta oo kale oo abku diro waxay weli raacaan marinka caadiga ah ee VPN.

Baaxadda cidhiidhi ah ayaa ah ujeeddada. Socket la ilaaliyay ma beddelo sida macmiilkaaga HTTP u xalliyo magacyada, interface-ka ay wicitaannadaada falanqaynta isticmaalaan, ama waxa ku dhaca isku xirka labaad ee hadhow furma.

Saddex shuruudood oo go'aansanaya baaxadda

Shuruudda koowaad waa haddii kaliya wareejinta tunnel-ku ay tahay inay baxdo. Haddii taraafikada kale ee abku ay tahay inay weli maraan VPN-ka, ilaalinta socket-ka waa baaxadda saxda ah. Shuruudda labaad waa haddii aad maamusho abuurista socket-ka. Maktabad socket-kiisa si qoto dheer u fura gudaha kuma siiso meel aad ku wacdo protect() haddii aanay soo bandhigin hook ama aanay aqbalin socket horay loo dhisay. Shuruudda saddexaad waa haddii abku si toos ah u gaari karo shabakadda gudaha ama portal-ka qabashada, taas oo ah shuruud ka duwan sidii tunnel-ku noolaan lahaa.

Ka-saarista abka addDisallowedApplication() waa qalab aan qarsoodi lahayn. Waxay VPN-ka ka saartaa isku xir kasta oo abku sameeyo, oo ay ku jiraan kuwa aad rabtay in la baaro, qalabkana waxay beddeshaa sida ogaanshaha guduhu u dhaqmo.

Ikhtiyaarka saddexaad waa in wareejinta lagu xiro shabakad la doortay iyadoo la isticmaalayo bindProcessToNetwork() ama gacan shabakadeed heer socket. Taasi waa faa'iido leh marka qalabku isku mar hayo Wi-Fi iyo shabakad mobayl ah oo aad rabto in tunnel-ku maro xariiq gaar ah.

Wac inta wareejinta la abuurayo

Wac protect() isla block-ka abuura wareejinta, ka hor connect() ama send(). Haddii wicitaanku soo celiyo false, xir socket-ka oo habaynta ha guuldareysto; sii wadista waxay kuu reebtaa wareejin ay packets-keedu dib u gali karaan interface-kaaga.

Qaabku aad buu u yar yahay in hal meel lagu hayo:

DatagramSocket transport = new DatagramSocket();
if (!protect(transport)) {
    transport.close();
    throw new IOException("transport not protected");
}
transport.connect(serverAddress);

Saddex faahfaahin ayaa halkan qaniinaya. Marka hore, boolean-ka ayaa ah calaamadda kaliya ee aad hesho, sidaas darteed guuldarada ku qor macne ku filan oo aad ku kala garto ogolaansho la laalay iyo wicitaan la diiday. Marka labaad, protect() wuxuu daboolaa socket-ka, ma aha lambarka descriptor-ka: haddii aad xirto socket-ka oo hadhow isla tiradaas dhan u isticmaasho socket kale, socket-ka cusub lama ilaalin. Marka saddexaad, marka maktabad native ah ay furaan wareejinta, ilaali descriptor-ka ka hor inta aan code-ka native-ka xiriirin, haddii kale marinka laga yaabaa in horey loo doortay. Tixraaca VpnService waa meesha aad ku xaqiijiso culaysyada heerka API-gaaga bartilmaameedka ah uu dhab ahaan bixiyo.

Tijaabi marinka la xannibay, ma aha oo kaliya kan farxadda leh

Xaqiiji iyadoo tunnel-ku shaqaynayo, sababtoo ah taasi waa xaaladda kaliya ee labada marin ay ku kala duwanaan karaan. Dir hal codsi iyadoo la marayo wareejinta la ilaaliyay iyo mid ka yimaada marin code ah oo aan waligiis wicin protect(), kadibna isbarbar dhig waxa dhinaca fog arko: isku xirka la ilaaliyay waa inuu yimaadaa isagoo shabakadda hoose isha u ah, halka kan aan la ilaalin uu muujiyo cinwaanka tunnel-ka laftiisa oo uu dhaqaajiyo tiriyaasha byte-ka tunnel-ka. Qalabka dhexdiisa, ss ama netstat waxay muujiyaan isla kala qaybsanaantaas ka hor inta wax raadiyaha ka baxin.

Tijaabi laalista si gooni ah, sababtoo ah isbeddel ogolaansho ayaa dumiya interface-ka isagoon taaban code-kaaga socket-ka. Laal ogolaanshaha VPN ama jooji adeegga, dib u dhis wareejinta, oo xaqiiji in protect() wali soo celiyo true iyo in wareejintu dib u xirmo marka ogolaanshaha mar kale la bixiyo.

Haddii codsiga la ilaaliyay si kastaba u raaco tunnel-ka, wicitaanka ilaalinta waxay u badan tahay inuu dhaco ka dib markii socket-ka horey loo maray. U rar hore oo mar kale tijaabi.

Go'aanka ku qor agteeda habaynta wareejinta: socket-yada la ilaaliyay, taraafikada abka ee laga saaray, iyo waxa abku sameeyo marka ilaalintu guuldareysto. Sadarkaas ayaa ka hortagaya in dib-u-habeyn dambe ay baaxadda u ballaariso abka oo dhan sababtoo ah hal tijaabo ayaa guuldareystay. Waxay kaloo siisaa qofka xiga hab uu u hubsado ujeeddada isagoon manifest-ka dib u qaadin.

Maqaallo la xiriira