Zašto blokirana Android aplikacija i dalje pokazuje mrežni promet
Brojač potrošnje mjeri bajtove na jednoj granici, a ne uspješan zahtjev. Provjerite vremenski prozor, pripisivanje UID-u i koja aplikacija posjeduje VPN uslugu.
Blokirate aplikaciju u svom Android VPN vatrozidu, aplikacija prestane raditi, a njezin redak potrošnje nastavlja rasti. Primamljiv zaključak je da je blokada propustila ili da je brojač pokvaren. Ni jedno ne slijedi. Zapis o potrošnji kaže da su bajtovi pripisani tom identitetu u nekoj točki promatranja; ne govori ništa o tome je li udaljena usluga prihvatila zahtjev. Kad znate koja je granica mjerena i kojem je identitetu to naplaćeno, dva promatranja prestaju proturječiti jedno drugom.
Brojač mjeri bajtove, a ne dostavu
Android pripisuje promet UID-u i broji ga u oba smjera, i to na granici sučelja, a ne u trenutku kad zahtjev aplikacije uspije.
Odbijen pokušaj veze ipak pomiče pakete: SYN, reset ili ponovna slanja koja slijede, plus DNS upit koji je prethodio objema. Ti bajtovi postoje iako ništa nije dostavljeno, a na nekim putanjama broje se prije nego što bilo koji filtar odluči što će s njima.
Zato redak blokirane aplikacije može rasti dok svaki zahtjev pada. Brojač odgovara na pitanje „koliko je bajtova pripisano ovom identitetu“, a ne „je li ovaj identitet stigao na internet“. Grafikon ne može razlikovati prihvaćeni tok od pristojno odbijenog rukovanja, a ni zbroj koji zbraja oba smjera zajedno.
Pripisivanje slijedi UID, a ne ikonu
Redak je po UID-u, a jedan UID može dijeliti više paketa, dok vidljiva aplikacija može predati posao zasebnoj komponenti koja radi pod vlastitim identitetom. Kartica preglednika koju crta zajednički WebView proces, usluga pozadinske sinkronizacije ili prateći paket instaliran uz glavnu aplikaciju stvaraju promet koji zaslon potrošnje može prikazati pod imenom koje niste očekivali ili pod aplikacijom koju ste blokirali. Blokirani paket i pomoćnik koji nosi njegove zahtjeve dva su različita subjekta, a pravilo je pokrivalo samo jedan od njih.
Kad brojevi izgledaju pogrešno, usporedite UID, a ne oznaku. API potrošnje pita se po UID-u, a adb shell dumpsys package <package> | grep userId= ispisuje broj s kojim treba usporediti, pa su dva unosa s istim UID-om isti identitet iz kuta brojača.
Vremenski prozor može prethoditi vašem pravilu
Podaci o potrošnji prikupljaju se u skupinama i ispituju, ne prenose se uživo. Dnevni zbroj može uključivati minute prije nego što ste uključili blokadu, pozadinsku sinkronizaciju iz prethodnog sata ili promet koji je već bio u tijeku. Uspoređivati kumulativni zbroj s jednim odbijenim zahtjevom i razliku nazivati propustom pogreška je mjerenja, a ne nalaz vatrozida.
Upotrijebite kraći prozor i svjež početak. Zabilježite vremensku oznaku kad promijenite pravilo, pričekajte jedan interval prikupljanja, pa gledajte samo podatke nakon njega. Ako zbroj nastavi rasti u prozoru koji počinje nakon pravila, imate što istraživati; ako prestane rasti, raniji rast bio je prikazana povijest.
VPN usluga možda nije ona koju ste postavili
VPN vatrozid vidi samo promet koji nosi njegova vlastita usluga. Ako se pokrene druga VPN aplikacija i preuzme aktivnu vezu, vaš filtar više nije na putu, dok njegovo sučelje još postoji u postavkama. Popisi zaobilaženja po aplikacijama to rade namjerno, a profil koji izuzima aplikaciju nije propust kad aplikacija tada radi.
IPv4, IPv6 i DNS također se mogu razilaziti. Filtar koji obrađuje IPv4 može ostaviti IPv6 ili privatni DNS resolver izvan sebe, pa dio prometa aplikacije slijedi putanju koju vaša pravila nikad nisu opisala. Provjerite koja aplikacija trenutačno posjeduje VPN i što kaže popis izuzetaka prije nego što išta prepišete:
adb shell settings get secure always_on_vpn_app
adb shell dumpsys connectivity
adb shell dumpsys netstats detail
Testirajte jedan svjež zahtjev i zapišite četiri činjenice
Odaberite bezazlen zahtjev, izvedite ga jednom i zapišite četiri činjenice: pravilo na snazi, UID aplikacije, stanje mreže i vrijeme. Zatim provjerite je li vaš filtar zabilježio tok i je li odredište ili pristupnik vidio istu vezu. Jedan tok identificiran na obje strane dokaz je; zbirni ukupni iznos nije.
Obranjiv zaključak imenuje što je odbijeno i koje je promatranje to potvrdilo. „Brojač je porastao“ nije nalaz, a „svi su brojači potrošnje lažni“ također nije. Slogan o OSI sloju to ne rješava: iskren odgovor je da brojač i blokada mogu oboje biti točni dok opisuju različite stvari. Androidova referenca NetworkStatsManager dokumentira kako se te skupine ispituju i pripisuju.