Chosain ceithre thoimhde faoi Android VpnService an chuid is mó de sheachtain orm uair amháin, agus ní raibh aon cheann acu faoin bprótacal sreinge. Dúirt an aip go raibh sí ceangailte, shuigh deilbhín an eochair sa bharra stádais, agus chuaigh an trácht amach ar an ngnáthród fós. Bhí mé i gcónaí ag glacadh leis gur liomsa an tollán go dtí go stopfainn é, gurbh iad na ród a chuir mé leis na ród a fuair mé, agus go dtógfadh glao ar stopSelf an comhéadan síos leis. Bhí an tseirbhís ag iompar go díreach mar atá doiciméadaithe. Ba é mo mhúnla meabhrach an chuid bhriste.

Miotas 1: fanann an tollán suas go dtí go stopann tú é

Coinníonn Android comhéadan VPN amháin ag an am. Bunaigh dara ceann agus ní chuireann an t-ardán sa scuaine é: díghníomhachtaíonn sé do cheannsa agus glaonn onRevoke() ar do sheirbhís. Mura ndéanann do chód ach aon rud a leagan síos ar bhrú cnaipe, fágtar tuairisceoir agus snáithe léitheoireachta ina dhiaidh agus faigheann an chéad tús eile an dá rud le hoidhreacht.

Deir an tagairt VpnService go soiléir go dtugann prepare() null nuair a bhíonn toiliú ag an aip cheana féin, agus Intent nuair a chaithfidh an t-úsáideoir é a cheadú fós. Ní thagann an toiliú sin ach amháin má sheachadann tú an rún trí startActivityForResult(). Seachain an seachadadh agus tugann establish() null ar ais, rud a léitear mar chliseadh ciúin seach mar fhadhb cheada.

Cuireann Always-on VPN úinéir leis nach rialaíonn tú. Is féidir leis an gcóras an tollán a thabhairt ar ais tar éis tosaithe nó tar éis tuairte, agus téann sé chun tosaigh ar aip VPN a thosaigh an t-úsáideoir de láimh. Tóg onRevoke() ionas go ndúnfaidh sé na hacmhainní céanna a dhúnann do ghnáthmhúchadh, agus caith leis mar phríomhbhealach stoptha seach mar chás coirne. Athraíonn úsáideoirí aipeanna VPN; caithfidh do chód teacht slán as sin.

Miotas 2: gabhann addRoute go díreach an méid a liostaigh tú

Cinneann na ród cé na paicéid a shroicheann do thuarisceoir, agus cruthaíonn earráid scóipe an cás a chuirfeadh as duine, ina dtéann cuid den trácht tríd an tollán agus nach dtéann cuid eile. Tógann addRoute("0.0.0.0", 0) an IPv4 ar fad, rud a chiallaíonn go dtagann gach paicéad chugat anois agus go gcaithfear é a chur ar aghaidh nó a ligean thar. Ní thógann /32 d'aon óstach amháin beagnach aon rud, agus iompraíonn gach rud eile mar nár suiteáladh do VPN riamh.

Comhairtear na teaghlaigh ar leithligh. Fágann ród IPv4 amháin IPv6 ar an bhfoshreang, mar sin is féidir le hóstach déchruach réiteach agus nascadh lasmuigh den tollán fós agus é ag breathnú go hiomlán ceangailte istigh ann.

Leanann DNS an loighic chéanna. Téann freastalaithe a cuireadh leis le addDnsServer() chuig aipeanna a úsáideann réititheoir an tolláin, agus déanann aip a bhfuil a críochphointe DNS criptithe féin aici nó Private DNS socraithe ar óstainm neamhaird iomlán díobh. Nuair a theipeann ar ainmneacha d'aip amháin agus a n-oibríonn siad do cheann eile, seiceáil cosán an réititheora sula ndéanann tú teagmháil le haon ród amháin.

Miotas 3: is lasc iad na rialacha de réir aipe ar féidir leat a chasadh gach bealach

Is dhá mhód iad addDisallowedApplication() agus addAllowedApplication(), ní dhá scagaire. Glacann an tógálaí le múnla amháin in aghaidh an tolláin, mar sin úsáideann aip a theastaíonn gach rud seach trí phaicéad an liosta toirmiscthe agus fágann sí an liosta ceadaithe folamh. Eisiatar a chéile iad, agus faigheann daoine amach faoi sin ag am rite tar éis don scáileán socruithe an dá lasc a thairiscint cheana.

Bíonn infheictheacht paicéad ag baint freisin. Ar Android 11 agus níos déanaí ní féidir leat ach paicéid a fheiceann tú a ainmniú, mar sin caillfidh liosta eisiaimh a tógadh ó iarratas nach bhfuil cead ag d'aip a rith iontrálacha go ciúin. Cuir an liosta i gcomparáid leis an méid a thugann an bainisteoir paicéad ar ais i ndáiríre sula mbeidh muinín agat as.

Roinneann próifílí oibre an lucht féachana arís. Clúdaíonn tollán a thosaítear laistigh den phróifíl an phróifíl sin agus a cuid aipeanna, agus coinníonn an taobh pearsanta a nascacht féin. Cinneadh scóipe a dhéantar uair amháin é sin, agus is leis an gcomhéadan é seach le ticéad tacaíochta.

Miotas 4: cuireann stopSelf deireadh leis an tollán

Ní chuireann. Maireann an comhéadan sa tuairisceoir a thugann establish() ar ais, agus is féidir leis an réad seirbhíse bás a fháil agus an tuairisceoir sin fós oscailte. Dún an ParcelFileDescriptor ar dtús, scaoil an tagairt, nasc nó cuir isteach ar na snáitheanna léitheoireachta agus scríbhneoireachta, ansin glaoigh ar stopForeground(true) agus stopSelf() san ord sin.

Is é tuairisceoir dearmadta an ghnáthchúis a bhíonn le seirbhís a fheictear ag teacht slán as a hiarratas stoptha féin, agus míníonn sé ród sheanbhunaithe a mhaireann níos faide ná an aip a chuir léi í.

Tá an earráid chontrártha chomh coitianta céanna: an tuairisceoir a dhúnadh agus snáithe léitheoireachta i lár an léithe, agus ansin an snáithe sin a fhágáil le heisceacht a láimhseáil nár scríobh aon duine cóid di. Coinnigh an t-ord múchta in aon áit amháin agus ligean do ghníomh an úsáideora agus do onRevoke() glaoch isteach ann.

Cad ba cheart a sheiceáil nuair a fhéachann an tollán marbh

Cosain soicéid fhadtéarmacha le protect() sula n-ardaítear an tollán. Gan é, déantar iompar an tolláin féin a ródú ar ais isteach sa tollán agus stadann an nasc ar bhealach a fhéachann go díreach cosúil le locht freastalaí. Tástáil in aghaidh seoladh nach bhfuil ann ach taobh thiar den ghréasán iargúlta, ní suíomh poiblí a fhreagraíonn ón taisce nó ón mbunchosán.

Logáil toradh establish(), na ród, na paicéid eisiata agus an chúis mhúchta. Scarann na ceithre líne sin fadhb toilithe ó fhadhb scóipe agus ó fhadhb saolré gan gabháil paicéad.

Ailt ghaolmhara