Kodėl užblokuota Android programėlė vis dar rodo tinklo naudojimą
Naudojimo skaitiklis matuoja baitus vienoje riboje, o ne sėkmingą užklausą. Patikrinkite laiko langą, UID priskyrimą ir tai, kuri programėlė valdo VPN paslaugą.
Jūs užblokuojate programėlę savo Android VPN užkardoje, programėlė nustoja veikti, o jos naudojimo eilutė toliau kyla. Viliojanti išvada — blokada prasiskverbė arba skaitiklis sugedęs. Nė viena neišplaukia. Naudojimo įrašas sako, kad baitai buvo priskirti tam identitetui tam tikrame stebėjimo taške; jis nieko nesako apie tai, ar nuotolinė paslauga priėmė užklausą. Kai žinote, kuri riba buvo matuojama ir kuriam identitetui tai priskaičiuota, du stebėjimai nustoja prieštarauti vienas kitam.
Skaitiklis matuoja baitus, o ne pristatymą
Android priskiria srautą UID ir skaičiuoja jį abiem kryptimis, ir tai daro sąsajos riboje, o ne tuo metu, kai programėlės užklausa pavyksta.
Atmestas prisijungimo bandymas vis tiek judina paketus: SYN, atstatymą arba po jų einančius pakartotinius perdavimus, be to, DNS užklausą, kuri ėjo prieš abu. Tie baitai egzistuoja net kai nieko nebuvo pristatyta, o kai kuriais keliais jie skaičiuojami anksčiau, nei bet koks filtras nusprendžia, ką su jais daryti.
Štai kodėl užblokuotos programėlės eilutė gali augti, nors kiekviena užklausa nepavyksta. Skaitiklis atsako į klausimą „kiek baitų buvo priskirta šiam identitetui“, o ne „ar šis identitetas pasiekė internetą“. Diagrama negali atskirti priimto srauto nuo mandagiai atmesto rankos paspaudimo, o sumos, kuri sudeda abi kryptis, taip pat negali.
Priskyrimas seka UID, o ne piktogramą
Eilutė yra pagal UID, ir vieną UID gali dalytis daugiau nei vienas paketas, o matoma programėlė gali perduoti darbą atskiram komponentui, veikiančiam pagal savo identitetą. Naršyklės skirtukas, piešiamas bendro WebView proceso, foninio sinchronizavimo paslauga arba kartu su pagrindine programėle įdiegtas palydovinis paketas – visi jie kuria srautą, kurį naudojimo ekranas gali rodyti vardu, kurio nesitikėjote, arba po programėle, kurią tikrai užblokavote. Užblokuotas paketas ir jo užklausas nešantis pagalbininkas yra du skirtingi subjektai, o taisyklė apėmė tik vieną iš jų.
Kai skaičiai atrodo neteisingi, lyginkite UID, o ne etiketę. Naudojimo API klausiama pagal UID, o adb shell dumpsys package <package> | grep userId= išspausdina skaičių, su kuriuo lyginti, tad du įrašai su tuo pačiu UID skaitiklio požiūriu yra tas pats identitetas.
Laiko langas gali būti ankstesnis už jūsų taisyklę
Naudojimo duomenys renkami kibiruose ir klausiami periodiškai, o ne transliuojami tiesiogiai. Dienos suma gali apimti minutes prieš įjungiant blokadą, ankstesnės valandos foninį sinchronizavimą arba srautą, kuris jau buvo kelyje. Lyginti sukauptą sumą su viena atmesta užklausa ir skirtumą vadinti nuotėkiu yra matavimo klaida, o ne užkardos radinys.
Naudokite trumpesnį langą ir švarią pradžią. Užsirašykite laiko žymą, kai pakeisite taisyklę, palaukite vieną rinkimo intervalą, tada žiūrėkite tik į duomenis po jo. Jei suma toliau kyla lange, kuris prasideda po taisyklės, turite ką tirti; jei nustoja kilti, ankstesnis augimas buvo rodoma istorija.
VPN paslauga gali būti ne ta, kurią sukonfigūravote
VPN užkarda mato tik srautą, kurį neša jos pačios paslauga. Jei paleidžiama kita VPN programėlė ir perima aktyvų ryšį, jūsų filtras nebėra kelyje, nors jo sąsaja vis dar yra nustatymuose. Programėlių apėjimo sąrašai tai daro tyčia, o profilis, kuris išskiria programėlę, nėra nuotėkis, kai programėlė po to veikia.
IPv4, IPv6 ir DNS taip pat gali skirtis. Filtras, tvarkantis IPv4, gali palikti IPv6 arba privatų DNS sprendiklį už savęs, todėl dalis programėlės srauto eina keliu, kurio jūsų taisyklės niekada neaprašė. Prieš ką nors perrašydami patikrinkite, kuri programėlė dabar valdo VPN ir ką sako išimčių sąrašas:
adb shell settings get secure always_on_vpn_app
adb shell dumpsys connectivity
adb shell dumpsys netstats detail
Išbandykite vieną naują užklausą ir užrašykite keturis faktus
Pasirinkite nekenksmingą užklausą, atlikite ją vieną kartą ir užrašykite keturis faktus: galiojančią taisyklę, programėlės UID, tinklo būseną ir laiką. Tada patikrinkite, ar jūsų filtras užregistravo srautą ir ar paskirties vieta ar šliuzas matė tą patį ryšį. Vienas abiejose pusėse atpažintas srautas yra įrodymas; suminis skaičius – ne.
Apginama išvada įvardija, kas buvo atmesta ir kuris stebėjimas tai patvirtino. „Skaitiklis pakilo“ nėra radinys, o „visi naudojimo skaitikliai netikri“ taip pat ne. OSI sluoksnio šūkis to neišsprendžia: sąžiningas atsakymas yra tas, kad skaitiklis ir blokada gali abu būti teisingi, aprašydami skirtingus dalykus. Android NetworkStatsManager nuoroda dokumentuoja, kaip tie kibirai klausiami ir priskiriami.