Zašto blokirana Android aplikacija i dalje pokazuje mrežni saobraćaj
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 firewallu, aplikacija prestane raditi, a njen red 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 tački posmatranja; on ne kaže ništa o tome da li je udaljena usluga prihvatila zahtjev. Kad znate koja je granica mjerena i kojem identitetu je to naplaćeno, dva posmatranja prestaju proturječiti jedno drugom.
Brojač mjeri bajtove, ne dostavu
Android pripisuje saobraćaj UID-u i broji ga u oba smjera, i to na granici interfejsa, a ne u trenutku kad zahtjev aplikacije uspije.
Odbijen pokušaj veze i dalje pomjera 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 filter odluči šta s njima.
Zato red 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 zbir koji sabira oba smjera zajedno.
Pripisivanje slijedi UID, a ne ikonu
Red 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 iscrtava zajednički WebView proces, usluga pozadinske sinhronizacije ili prateći paket instaliran uz glavnu aplikaciju, svi oni stvaraju saobraćaj koji ekran 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, uporedite UID, a ne oznaku. API potrošnje se pita po UID-u, a adb shell dumpsys package <package> | grep userId= ispisuje broj s kojim treba uporediti, pa su dva unosa s istim UID-om isti identitet iz ugla brojača.
Vremenski prozor može prethoditi vašem pravilu
Podaci o potrošnji prikupljaju se u korpama i ispituju, ne prenose se uživo. Dnevni zbir može uključivati minute prije nego što ste uključili blokadu, pozadinsku sinhronizaciju iz prethodnog sata ili saobraćaj koji je već bio u toku. Upoređivati kumulativni zbir s jednim odbijenim zahtjevom i razliku nazivati propustom je greška mjerenja, a ne nalaz firewalla.
Koristite kraći prozor i svjež početak. Zabilježite vremensku oznaku kad promijenite pravilo, sačekajte jedan interval prikupljanja, pa gledajte samo podatke nakon njega. Ako zbir nastavi rasti u prozoru koji počinje nakon pravila, imate šta istraživati; ako prestane rasti, raniji rast je bio prikazana historija.
VPN usluga možda nije ona koju ste podesili
VPN firewall vidi samo saobraćaj koji nosi njegova vlastita usluga. Ako se pokrene druga VPN aplikacija i preuzme aktivnu vezu, vaš filter više nije na putu, dok njegov interfejs još postoji u postavkama. Liste 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 razići. Filter koji obrađuje IPv4 može ostaviti IPv6 ili privatni DNS resolver izvan sebe, pa dio saobraćaja aplikacije slijedi putanju koju vaša pravila nikad nisu opisala. Provjerite koja aplikacija trenutno posjeduje VPN i šta kaže lista 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 novi zahtjev i zapišite četiri činjenice
Odaberite bezazlen zahtjev, izvršite ga jednom i zapišite četiri činjenice: pravilo na snazi, UID aplikacije, stanje mreže i vrijeme. Zatim provjerite je li vaš filter zabilježio tok i je li odredište ili gateway vidio istu vezu. Jedan tok identificiran na obje strane dokaz je; zbirni ukupni iznos nije.
Odbranjiv zaključak imenuje šta je odbijeno i koje posmatranje je to potvrdilo. „Brojač je porastao“ nije nalaz, a „svi brojači potrošnje su lažni“ također nije. Slogan o OSI sloju ovo ne rješava: pošten odgovor je da brojač i blokada mogu oboje biti tačni dok opisuju različite stvari. Androidova referenca NetworkStatsManager dokumentuje kako se te kofere ispituju i pripisuju.