VpnService protect() au kuondoa programu: ni ipi inayorekebisha uelekezaji
Linda soketi inayobeba handaki, au ondosha programu yote: masharti matatu yanayoamua wigo ambao VPN yako ya Android inahitaji.
Una njia mbili za kuzuia pakiti za handaki yenyewe zisizigane na handaki: linda soketi ya usafirishaji, au ondoa programu yote kwenye VPN. Zinatatua matatizo tofauti, na kuchagua ile pana zaidi kwa sababu ni rahisi kuunganisha ndiyo njia ambayo programu hupoteza ufikiaji wa mtandao wa ndani na DNS iliyogawanyika bila kugundua. Anza na kile kinachopaswa kubaki nje ya handaki, kisha chagua wigo mdogo zaidi unaofikia hilo.
Kile protect() huondoa kwenye handaki
VpnService.protect() ni wito kwa soketi moja. Unampa soketi au kielekezi kinachobeba handaki, na Android huweka alama kwenye soketi hiyo ili trafiki yake itumie mtandao wa chini badala ya kiolesura cha VPN. Kila kitu kingine ambacho programu hutuma bado hufuata njia ya kawaida ya VPN.
Wigo huo mwembamba ndio lengo. Soketi iliyolindwa haibadilishi jinsi mteja wako wa HTTP anavyotatua majina, kiolesura ambacho wito zako za uchanganuzi hutumia, au kile kinachotokea kwa muunganisho wa pili unaofunguliwa baadaye.
Masharti matatu yanayoamua wigo
Sharti la kwanza ni kama usafirishaji wa handaki pekee ndio unapaswa kutoka. Ikiwa trafiki nyingine ya programu inapaswa bado kupita kwenye VPN, ulinzi wa soketi ndio wigo sahihi. Sharti la pili ni kama wewe unadhibiti uundaji wa soketi. Maktaba inayofungua soketi yake yenyewe kwa kina haikupi nafasi ya kuita protect() isipokuwa inaonyesha ndoano au inakubali soketi iliyojengwa tayari. Sharti la tatu ni kama programu lazima ifikie mtandao wa ndani au lango la kukamatwa moja kwa moja, jambo ambalo ni hitaji tofauti na kuweka handaki hai.
Kuondoa programu kwa addDisallowedApplication() ni chombo kisicho na upole. Huondoa kila muunganisho ambao programu hufanya kutoka kwenye VPN, ikiwemo yale uliyotaka kuchunguza, na kwenye vifaa vingine hubadilisha pia jinsi ugunduzi wa ndani unavyofanya kazi.
Chaguo la tatu ni kufunga usafirishaji kwenye mtandao uliochaguliwa kwa bindProcessToNetwork() au kwa kishikio cha mtandao kwa kiwango cha soketi. Hilo ni muhimu wakati kifaa kina Wi-Fi na mtandao wa simu kwa wakati mmoja na unataka handaki lipite kwenye njia maalum ya juu.
Iite wakati usafirishaji unaundwa
Ita protect() katika kizuizi kilekile kinachounda usafirishaji, kabla ya connect() au send(). Ikiwa wito unarudisha false, funga soketi na usanidi ushindwe; kuendelea kunakuachia usafirishaji ambao pakiti zake zinaweza kuingia tena kwenye kiolesura chako mwenyewe.
Umbo ni dogo vya kutosha kubaki mahali pamoja:
DatagramSocket transport = new DatagramSocket();
if (!protect(transport)) {
transport.close();
throw new IOException("transport not protected");
}
transport.connect(serverAddress);Mambo matatu yanauma hapa. Kwanza, thamani ya boolean ndiyo ishara pekee unayopata, kwa hivyo rekodi kushindwa kwa muktadha wa kutosha kutofautisha idhini iliyoondolewa na wito uliokataliwa. Pili, protect() hufunika soketi, si namba ya kielekezi: ikiwa unafunga soketi na baadaye kutumia namba hiyo hiyo kwa soketi nyingine, soketi mpya haijalindwa. Tatu, wakati maktaba ya asili inafungua usafirishaji, linda kielekezi kabla msimbo wa asili haujaunganisha, vinginevyo njia inaweza kuwa imechaguliwa tayari. Marejeo ya VpnService ndio mahali pa kuthibitisha mizigo iliyozidi ambayo kiwango chako cha API kinatoa.
Jaribu njia iliyozuiwa, si ile ya mafanikio pekee
Thibitisha handaki likiwa limewashwa, kwa sababu hicho ndicho hali pekee ambayo njia hizo mbili zinaweza kutofautiana. Tuma ombi moja kupitia usafirishaji uliolindwa na lingine kutoka njia ya msimbo ambayo haikuita protect() kamwe, kisha linganisha kile upande wa mbali unaona: muunganisho uliolindwa unapaswa kufika ukiwa na mtandao wa chini kama chanzo, wakati ule usiolindwa unaonyesha anwani ya handaki yenyewe na husogeza vihesabu vya baiti vya handaki. Kwenye kifaa, ss au netstat huonyesha mgawanyiko huo huo kabla ya kitu chochote kuondoka kwenye redio.
Jaribu kuondoa idhini kwa tofauti, kwa sababu mabadiliko ya idhini huvunja kiolesura bila kugusa msimbo wako wa soketi. Ondoa idhini ya VPN au simamisha huduma, jenga upya usafirishaji, na uthibitishe kwamba protect() bado inarudisha true na kwamba usafirishaji unaunganishwa tena pindi idhini inapotolewa tena.
Ikiwa ombi lililolindwa linafuata handaki hata hivyo, wito wa ulinzi huenda unatokea baada ya soketi kuelekezwa tayari. Uhamishe mapema na ujaribu tena.
Weka uamuzi umeandikwa kando ya usanidi wa usafirishaji: soketi zipi zinalindwa, trafiki ipi ya programu imeondolewa, na programu hufanya nini ulinzi unaposhindwa. Mstari huo ndio huzuia marekebisho ya baadaye kupanua uondoaji hadi programu yote kwa sababu jaribio moja lilikuwa likishindwa. Pia humpa mtu anayefuata njia ya kukagua nia bila kuondoa uhandisi wa manifest.