Kāpēc bloķēta Android lietotne joprojām rāda tīkla lietojumu
Lietojuma skaitītājs mēra baitus vienā robežā, nevis veiksmīgu pieprasījumu. Pārbaudiet laika logu, UID attiecināšanu un to, kura lietotne pārvalda VPN pakalpojumu.
Jūs bloķējat lietotni savā Android VPN ugunsmūrī, lietotne pārstāj darboties, un tās lietojuma rinda turpina kāpt. Vilinošais secinājums ir, ka blokējums ir noplūdis vai ka skaitītājs ir bojāts. Neviens no tiem neizriet. Lietojuma ieraksts saka, ka baiti tika attiecināti uz šo identitāti kādā novērojuma punktā; tas neko nesaka par to, vai attāls pakalpojums pieņēma pieprasījumu. Kad zināt, kura robeža tika mērīta un kurai identitātei tas tika uzkrāts, abi novērojumi pārstāj būt pretrunā viens otram.
Skaitītājs mēra baitus, nevis piegādi
Android attiecina datplūsmu uz UID un skaita to abos virzienos, un to dara saskarnes robežā, nevis brīdī, kad lietotnes pieprasījums izdodas.
Noraidīts savienojuma mēģinājums joprojām pārvieto paketes: SYN, atiestatījumu vai tai sekojošās atkārtotās pārraides, kā arī DNS vaicājumu, kas bija pirms abiem. Šie baiti pastāv arī tad, ja nekas netika piegādāts, un dažos ceļos tos skaita pirms jebkurš filtrs izlemj, ko ar tiem darīt.
Tāpēc bloķētas lietotnes rinda var augt, kamēr katrs pieprasījums neizdodas. Skaitītājs atbild uz jautājumu „cik baitu tika attiecināts uz šo identitāti“, nevis „vai šī identitāte sasniedza internetu“. Diagramma nevar atšķirt pieņemtu plūsmu no pieklājīgi noraidītas rokasspiediena, un arī kopsumma, kas saskaita abus virzienus, to nevar.
Attiecināšana seko UID, nevis ikonai
Rinda ir pa UID, un vienu UID var dalīt vairākas pakotnes, kamēr redzama lietotne var nodot darbu atsevišķai komponentei, kas darbojas ar savu identitāti. Pārlūka cilne, ko zīmē koplietots WebView process, fona sinhronizācijas pakalpojums vai kopā ar galveno lietotni instalēta pavadošā pakotne — visi rada datplūsmu, ko lietojuma ekrāns var parādīt ar nosaukumu, kuru negaidījāt, vai zem lietotnes, kuru tiešām bloķējāt. Bloķēta pakotne un palīgs, kas pārvadā tās pieprasījumus, ir divi dažādi subjekti, un noteikums aptvēra tikai vienu no tiem.
Kad skaitļi izskatās nepareizi, salīdziniet UID, nevis etiķeti. Lietojuma API tiek vaicāta pēc UID, un adb shell dumpsys package <package> | grep userId= izdrukā skaitli, ar ko salīdzināt, tāpēc divi ieraksti ar vienu un to pašu UID skaitītāja skatījumā ir viena identitāte.
Laika logs var būt pirms jūsu noteikuma
Lietojuma dati tiek vākti spaiņos un vaicāti periodiski, nevis straumēti tiešraidē. Dienas kopsumma var ietvert minūtes pirms blokējuma ieslēgšanas, iepriekšējās stundas fona sinhronizāciju vai datplūsmu, kas jau bija ceļā. Salīdzināt uzkrāto kopsummu ar vienu noraidītu pieprasījumu un starpību saukt par noplūdi ir mērījuma kļūda, nevis ugunsmūra atradums.
Izmantojiet īsāku logu un tīru sākumu. Pierakstiet laika zīmogu, kad maināt noteikumu, nogaidiet vienu vākšanas intervālu, tad skatieties tikai datus pēc tā. Ja kopsumma turpina augt logā, kas sākas pēc noteikuma, jums ir kas izmeklējams; ja tā pārstāj augt, iepriekšējais pieaugums bija rādītā vēsture.
VPN pakalpojums var būt ne tas, ko esat konfigurējis
VPN ugunsmūris redz tikai datplūsmu, ko pārvadā tā paša pakalpojums. Ja sākas cita VPN lietotne un pārņem aktīvo savienojumu, jūsu filtrs vairs nav ceļā, kamēr tā saskarne joprojām ir iestatījumos. Apiešanas saraksti pa lietotnēm to dara apzināti, un profils, kas izslēdz lietotni, nav noplūde, kad lietotne pēc tam darbojas.
IPv4, IPv6 un DNS arī var atšķirties. Filtrs, kas apstrādā IPv4, var atstāt IPv6 vai privātu DNS atrisinātāju ārpus sevis, tāpēc daļa lietotnes datplūsmas seko ceļam, ko jūsu noteikumi nekad nav aprakstījuši. Pirms kaut ko pārrakstīt, pārbaudiet, kura lietotne tagad pārvalda VPN un ko saka izslēgšanas saraksts:
adb shell settings get secure always_on_vpn_app
adb shell dumpsys connectivity
adb shell dumpsys netstats detail
Pārbaudiet vienu jaunu pieprasījumu un pierakstiet četrus faktus
Izvēlieties nekaitīgu pieprasījumu, izpildiet to vienreiz un pierakstiet četrus faktus: spēkā esošo noteikumu, lietotnes UID, tīkla stāvokli un laiku. Pēc tam pārbaudiet, vai jūsu filtrs reģistrēja plūsmu un vai galamērķis vai vārteja redzēja to pašu savienojumu. Viena abās pusēs identificēta plūsma ir pierādījums; kopsumma nav.
Aizstāvams secinājums nosauc, kas tika liegts un kurš novērojums to apstiprināja. „Skaitītājs pieauga“ nav atradums, un „visi lietojuma skaitītāji ir viltoti“ arī nav. OSI slāņa sauklis to neizšķir: godīgā atbilde ir tāda, ka skaitītājs un blokējums var būt abi pareizi, vienlaikus aprakstot dažādas lietas. Android NetworkStatsManager atsauce dokumentē, kā šie spaiņi tiek vaicāti un attiecināti.