Կանոնը պարզ էր՝ զտել երթևեկությունը միայն այն ժամանակ, երբ հեռախոսը միացված է գրասենյակի Wi-Fi-ին։ Այն դիմացավ ամիսներ, և հետո մի առավոտ հեռախոսը նստած էր նույն SSID-ի վրա նույն բանալու պատկերակով, և զտումը դադարել էր։ Ցանցում ոչինչ չէր փոխվել. փոխվել էր այն, թե արդյոք հավելվածը կարող է տեսնել ցանցի անունը։ Android-ում «որը Wi-Fi-ի վրա եմ ես» և «արգելափակիր այս երթևեկությունը» երկու առանձին աշխատանք են, և firewall-ը, որը խառնում է դրանք, բաց ձախողվում է հենց այն պահին, երբ անունը դառնում է անհասանելի։

Ախտանիշը՝ ինքնությունը անհետանում է, քաղաքականությունը հետևում է

SSID-ի կանոնը կարդում է արժեք, ապա ընտրում ճյուղ։ Երբ ընթերցումը ոչ մի օգտակար բան չի վերադարձնում, կոդը պետք է ինչ-որ բան անի, և սովորական լռելյայնը «սպասվող ցանցը չէ, ուրեմն չզտել»-ն է։ Այդ լռելյայնը թույլտվության խնդիրը վերածում է երթևեկության արտահոսքի։ Բանալու պատկերակը մնում է տեսանելի, որովհետև VPN ծառայությունը դեռ աշխատում է. այն պարզապես կիրառում է մեկ այլ ճյուղ։

Նայե՛ք իրադարձությունների հաջորդականությանը, ոչ թե ցանցին։ Մերժված թույլտվության հարցումը, համակարգի թարմացումը, որը SSID-ի հասանելիությունը տեղափոխեց այլ թույլտվության հետևում, անջատված տեղադրության ծառայությունները կամ աշխատանքային պրոֆիլի քաղաքականության փոփոխությունը կարող են տալ նույն արդյունքը, մինչ հեռախոսը մնում է նույն մուտքի կետում։

Ինչու անունը կարող է վերադառնալ անհայտ

WifiInfo.getSSID()-ը վերադարձնում է ընթացիկ ցանցի ծառայությունների հավաքածուի նույնացուցիչը, և Android-ը փաստագրում է, որ տեղադրության նկատմամբ զգայուն դաշտերի հասանելիությունը կախված է թույլտվությունից։ Երբ հասանելիությունը բացակայում է, կանչը վերադարձնում է UNKNOWN_SSID բարձրաձայն ձախողվելու փոխարեն։ Ուստի դատարկ կամ անհայտ արժեքը ապացույց չէ, որ հեռախոսը լքել է Wi-Fi-ը. դա ապացույց է, որ հավելվածը չի կարող դասակարգել ցանցը։

Երկու ստուգում բաժանում են դեպքերը։ Հաստատե՛ք, որ հեռախոսը միացված է, և տեսե՛ք, թե ինչ է հաղորդում համակարգը, ապա հաստատե՛ք, որ հավելվածն իսկապես ունի այն թույլտվությունը, որն անհրաժեշտ է այս Android թողարկման վրա.

adb shell cmd wifi status
adb shell dumpsys package <your.app> | grep -i -E "ACCESS_FINE_LOCATION|NEARBY_WIFI_DEVICES"

Եթե կարգավիճակի տողը ցույց է տալիս միացված ցանց, մինչ հավելվածը տեսնում է անհայտ անուն, ապա դուք ունեք թույլտվության կամ API մակարդակի խնդիր, ոչ թե Wi-Fi-ի խնդիր։ Կարգավորե՛ք այն նախքան firewall-ի կանոններին դիպչելը, որովհետև յուրաքանչյուր հաջորդ կանոն գնահատվում է այն արժեքի նկատմամբ, որը հավելվածը չի կարող կարդալ։

Որտեղ է զտումն իրականում աշխատում

Android-ի տեղական firewall-ը սովորաբար օգտագործում է VpnService մոդելը՝ առանց երթևեկությունը հեռավոր սերվեր ուղարկելու. այն վերցնում է վիրտուալ միջերեսը, կիրառում է իր կանոնները և փոխանցում է այն, ինչ թույլատրում է։ Հարթակը թույլատրում է մեկ ակտիվ VPN ծառայություն մեկ օգտատիրոջ պրոֆիլի համար, և երկրորդը փոխարինում է առաջինին՝ դրա վրա շերտավորվելու փոխարեն։ Ուստի առանձին firewall հավելվածը և առանձին աշխատանքային VPN-ը երկաստիճան շղթա չեն կազմում. նրանցից մեկը հաղթում է։

Սա կարևոր է SSID-ի կանոնի համար, որովհետև կիրառման կետը և դիտարկման կետը տարբեր բաղադրիչներ են։ VpnService-ը որոշում է, թե ինչ է լքում սարքը. Wi-Fi API-ն միայն պիտակ է տալիս։ Հավելվածը կարող է ճիշտ կիրառել և սխալ դասակարգել, և հենց դա է այս հոդվածի ձախողումը։

Անհայտին տվե՛ք իր սեփական քաղաքականությունը

Ցանցի ինքնությունը դիտարկե՛ք որպես երեք վիճակ և գրե՛ք յուրաքանչյուրի քաղաքականությունը նախքան կանոնը թողարկելը։ Երրորդ վիճակն այն է, որը մոռացվում է, և հենց դրա մեջ ձեզ կդնի հարձակվողը կամ սխալ կարգավորումը։

ObservationPolicy to specify
Expected SSID is readableThe explicit filtering policy you designed
A different SSID is readableThe default policy for untrusted networks
Unknown, changing or unreadableFail closed until classification is reliable

Փակ ձախողվել նշանակում է, որ անհայտ վիճակը ժառանգում է ամենախիստ ողջամիտ քաղաքականությունը, ոչ թե ամենահարմարը։ Եթե դա հեռախոսը դարձնում է անօգտագործելի նոր ցանցում, ճիշտ լուծումը դիտավորյալ և տեսանելի բացառությունն է, ոչ թե դատարկ արժեքի ստուգման մեջ թաքնված լուռ վստահության որոշումը։

Ծանոթ SSID-ն պիտակ է, ոչ թե ցանցի օպերատորի ապացույց։ Ցանկացած մարդ կարող է գրասենյակի անունով մուտքի կետ գործարկել, ուստի անվան համընկնությունը երբեք չպետք է լինի միակ բանը զգայուն սեսիայի և անվստահելի հատվածի միջև։

Փորձարկե՛ք անցումները, ոչ թե կայուն վիճակը

Կայուն վիճակի փորձարկումները անցնում են այն ցանցում, որտեղ դուք կառուցել եք կանոնը։ Ձախողումները ապրում են անցումներում. մերժված թույլտվություն, Wi-Fi-ից բջջային ցանց, մի SSID-ից մյուսը, վերագործարկված VPN ծառայություն և մեկ այլ VPN հավելված, որը զբաղեցնում է միջերեսը։ Յուրաքանչյուրի համար որոշե՛ք՝ արդյոք գոյություն ունեցող կապերը վերանայվում են, և արդյոք պաշտպանված երթևեկությունը մնում է արգելափակված, քանի դեռ վիճակը անհայտ է։

Արդյունքը գրե՛ք երեք նախադասությամբ. դիտարկված պայմանը, որոշումը կիրառող բաղադրիչը և դիտավորյալ հետընթացը։ Եթե երեքից որևէ մեկը բացակայում է, կանոնը դեռ քաղաքականություն չէ. դա ենթադրություն է, որը պատահաբար աշխատում է գրասենյակի ցանցում։

Առնչվող հոդվածներ