Ar Android 10 agus níos déanaí, faigheann feidhmchlár a osclaíonn /proc/net/tcp diúltú rochtana in ionad tábla socket. Ní miste leis an gcomhéadan VPN: tagann paicéid fós, mar is cinneadh ródaithe é an tollán, ní cead comhaid. An rud a d'athraigh is an freagra ar cheist níos cúinge: “cén feidhmchlár a shealbhaíonn an nasc seo?” Is é ConnectivityManager.getConnectionOwnerUid an t-ionadaí, an t-iarratas in aghaidh an naisc a thacaítear leis, agus braitheann an rogha idir an sean-nós agus an API nua ar cé acu de thrí phost atá agat i ndáiríre: paicéid a fháil, sreabhadh a shannadh nó úsáid a shuimiú.

Dhá bhealach chun ceist an úinéara a fhreagairt

Roimh API 29, d'fhéadfadh próiseas faoi phribhléid nó root táblaí socket an eithne a léamh, an cheathairíl a mheaitseáil agus an UID úinéara a fháil amach. Thug sé sin fardal ar fud na gléise i gcomhad amháin. Ó API 29 tá radharc an chórais comhad srianta, agus is é an bealach a thacaítear leis iarratas in aghaidh an naisc leis an bprótacal, an seoladh áitiúil agus an seoladh cianda.

QuestionLegacy socket tablesgetConnectionOwnerUid
Who owns this flow?Scan and match the tupleAsk once per tuple
Device-wide inventory?Yes, when readableNo, one flow at a time
Historical usage?NoNo; that is NetworkStatsManager
Works without root?No on modern releasesYes, for authorized callers

Ní “sean in aghaidh nua” an chomparáid. Is trí phost éagsúla iad a shásaigh comhad amháin inléite tráth agus a shásaíonn trí chomhéadan éagsúla le trí chonradh éagsúla anois.

Is é an seoladh áitiúil pointe deiridh an fheidhmchláir

Glacann síniú an mhodha prótacal, seoladh socket áitiúil agus seoladh socket cianda. Ciallaíonn “áitiúil” taobh an fheidhmchláir sa nasc, ní an pointe a tharlaíonn a bheith ina fhoinse ag an bpaicéad tráth an scrúdaithe. Tá foinse agus ceann scríbe paicéid a thaistealaíonn ón bhfreastalaí cianda ar ais chuig an bhfeidhmchlár droim ar ais i leith an tsainmhínithe sin.

ConnectivityManager cm = getSystemService(ConnectivityManager.class);
int uid = cm.getConnectionOwnerUid(
    OsConstants.IPPROTO_TCP, appLocalAddress, appRemoteAddress);

Is é an botún treo seo an chúis is coitianta a thugann iarratas oibre freagra mícheart, nó ceann ar bith. Logáil an dá phointe roimh an nglao agus deimhnigh an péire i gcoinne an naisc a d'oscail an feidhmchlár i ndáiríre. Tá tábhacht leis an teaghlach seoladh freisin: is tuple éagsúla iad seoladh atá mapáilte ag IPv4 agus seoladh dúchasach IPv6, agus mar an gcéanna sreafaí TCP agus UDP ar na calafoirt chéanna.

Tá údarú agus torthaí neamhaitheanta mar chuid den chonradh

Tá an t-iarratas teoranta do ghlaoiteoirí údaraithe, lena n-áirítear an feidhmchlár VPN gníomhach don úsáideoir ábhartha. Ní féidir le feidhmchlár monatóireachta neamhghaolmhar glacadh leis gur féidir leis naisc phróifíl eile a áireamh, agus is féidir le glao neamhúdaraithe eisceacht slándála a chaitheamh in ionad earráid chaoga a thabhairt ar ais. Láimhseáil an dá thoradh go sainráite.

Ní ainm pacáiste é úinéir ar iarraidh. B'fhéidir gur dhún an sreabhadh idir an paicéad agus an t-iarratas, go bhfuil an tuple neamhiomlán, nó nach bhfuil cead ag an nglaoiteoir a fhios. Má chuirtear an chéad fhreagra rathúil i dtaisce agus má athúsáidtear níos déanaí é, sanntar nasc nua d'fheidhmchlár sean, rud is measa ná neamhaitheantas a thuairisciú.

Nuair a theipeann ar an sannadh, tá cinneadh de dhíth ar an trácht fós: bacáil é san áit a n-éilíonn an beartas, ceadaigh scóip a thuigeann tú amháin, nó nocht an bhearna. Baineann an cúltaca sin leis an dearadh, ní le nóta tráchta.

Is ceist eile í an chuntasaíocht

Tuairiscíonn NetworkStatsManager úsáid faoina rialacha rochtana féin. Is féidir leis a rá cé mhéad a d'aistrigh UID thar thréimhse; ní féidir leis úinéir paicéid bheo threallónaigh a rá. Déanann cumais líonra cur síos ar airíonna líonra, ní ar eolaire socket. Má mheascann tú an triúr, faigheann tú deais atá cosúil le bheith comhsheasmhach agus nach bhfuil.

Chun an cás simplí a shocrú cé na feidhmchláir a úsáideann an tollán, cuireann liostaí ceadaithe agus toirmiscthe feidhmchláir de chuid Android an beartas in iúl cheana féin gan aon scrapeáil. Coinnigh sannadh in aghaidh an tsreafa do na cásanna a bhfuil gá i ndáiríre leis, agus buiséad le haghaidh cur chun feidhme faoi chothabháil a láimhseálann treo, ceadanna agus stáit neamhaitheanta le chéile.

Roghnaigh an uirlis de réir poist, ansin tástáil na himill

Más é an riachtanas roghnú tolláin, úsáid liosta an ardáin. Más sannadh beo é, úsáid iarratas an úinéara agus caith le gach tuple nach féidir a fhreagairt mar neamhaitheanta. Más iomláin stairiúla iad, úsáid an stats API. Ansin tástáil na trí imeall a bhriseann cur chun feidhme naïve: paicéad sa treo eile, sreabhadh a dhúnann sula ndéanann tú iarratas, agus glaoiteoir nach é an VPN gníomhach é.

Ní éilíonn aon rud díobh seo SELinux a dhíchumasú, an fón a rootáil nó táblaí eithne a dhéanamh inléite go domhanda. Is é an srian an pointe: bhog an t-ardán an sannadh taobh thiar de chonradh ionas go mbeidh an freagra ar fáil don chomhpháirt a bhfuil gá dlisteanach aici leis, agus do dhuine ar bith eile.

Ailt ghaolmhara