Հարցրեք iOS հավելվածին՝ հեռախոսը VPN-ում է, թե ոչ, և ազնիվ պատասխանը այն է, որ այն չի կարող դա իմանալ ձեր նկատի ունեցած իմաստով։ SDK-ն չի տրամադրում «սարքը թունելում է» դրոշակ, և այն մասնավոր ինտերֆեյսները, որոնք կարող էին մոտենալ դրան, փակ են հրապարակվող հավելվածների համար։ Դուք կարող եք դիտել ձեր հավելվածի սեփական կարգավորումը, դրան կապված վիճակը և մեկ-երկու անուղղակի ակնարկ ցանցային կույտից։ Յուրաքանչյուրը պատասխանում է տարբեր հարցի, և կոտրված ստուգումների մեծ մասը գալիս է նրանից, որ դրանցից մեկը ընդունվում է որպես ամբողջ պատասխան։

Մեկ VPN դրոշակի առասպելը

Համոզմունքն այն է, որ SDK-ում ինչ-որ տեղ կա հատկություն, որը հաղորդում է՝ սարքը թունելում է, թե ոչ, ինչպես հասանելիության դրոշակը հաղորդում է՝ հոսթը պատասխանում է, թե ոչ։ Այդպիսի հանրային հատկություն գոյություն չունի։ Եվ նույնիսկ եթե լիներ, «թունել գոյություն ունի» և «իմ երթևեկությունն օգտագործում է այն» տարբեր պնդումներ են, և հավելվածների մեծ մասի համար կարևոր է միայն երկրորդը։

Հենց այդ բացն է պատճառը, որ մեկ տողանոց VPN հայտնաբերիչ գովազդող գրադարանները սովորաբար կարդում են ինչ-որ փխրուն բան, ինչպիսին ինտերֆեյսի անունը կամ պրոքսիի բանալին է, և ներկայացնում այն որպես դատավճիռ։

Բեռնեք նախընտրությունները, նախքան nil-ին վստահելը

Ընդհանուր կառավարչի օրինակը գոյություն ունի հենց որ պահանջեք այն, բայց նրա արձանագրության հատկությունը մնում է nil, քանի դեռ բեռնման callback-ը չի ավարտվել։ Այսպիսով nil արձանագրությունը նշանակում է «դեռ բեռնված չէ» առնվազն նույնքան հաճախ, որքան «տեղադրված չէ»։ Կատարեք ընթերցումը ավարտման բլոկի ներսում և միայն դրանից հետո որոշեք՝ գոյություն ունեցող արձանագրության օբյեկտը՝ միացված ակտիվացման դրոշակով, այսպիսի տեսք ունի «տեղադրվածը»։

Երկրորդ ազդանշանը կապի օբյեկտի վրա է՝ անվավեր վիճակը, որի մասին համակարգը հայտնում է, երբ այս հավելվածը տեղադրված կարգավորում չունի։ Անվավեր կարգավիճակը nil արձանագրության հետ միասին ավարտված բեռնումից հետո իրական բացակայություն է, ոչ թե ժամանակի մրցավազք։

Կապի փոփոխությունները գալիս են որպես ծանուցումներ

load-ին և save-ին փոխանցված մշակիչները հայտնում են, թե ինչ պատահեց կարգավորմանը, ոչ թե ինչ է անում թունելը։ Սպասելը, որ նրանցից մեկը գործարկվի միանալու պահին, մրցավազք է, որը երբեք չի լուծվում։ Փոխարենը հետևեք կարգավիճակի փոփոխության ծանուցմանը և կարդացեք կապի օբյեկտի ընթացիկ արժեքը, երբ այն հասնի։

Երբ կարգավորումը տեղադրված է, կապի վիճակն անցնում է կարճ հաջորդականությամբ՝ անջատված, միանում է, միացված, վերահաստատում, անջատվում։ «Միացված»-ը նկարագրում է թունելը, ոչ թե դրա հետևում գտնվող սերվերը, ուստի դա ապացույց չէ, որ երթևեկությունը հոսում է։ On-demand-ը կարող է թունել բարձրացնել նաև այն ժամանակ, երբ հավելվածը կասեցված է, և այդ դեպքում ծանուցումը հասնում է նախքան թարմացնելու բան ունենալը։

Սահմանափակ պրոքսիի պատկերը ակնարկ է, ոչ դատավճիռ

CFNetwork-ը կարող է հավելվածին տալ համակարգի ընթացիկ պրոքսիի կարգավորումները, և այդ արդյունքի ներսում կա սահմանափակ բառարան՝ ինտերֆեյսի անունով բանալիով։ tun, utun, ppp, ipsec կամ tap-ով սկսվող անուն տեսնելը ակնարկ է, որ թունել կա։ Այն մնում է պատկեր այն բանի, ինչ այս հավելվածը կարող է տեսնել, ոչ թե հայտարարություն այն մասին, թե ուր են գնում փաթեթները։

Մատակարարները համաձայն չեն անվանակոչման շուրջ, ուստի բացակայող նախածանցը ոչինչ չի ապացուցում, և առկա ինտերֆեյսը կարող է գոյություն ունենալ առանց երթևեկություն կրելու։ Հասանելիությունն էլ ավելի թույլ է. մասնավոր հասցեին հաջող հարցումը ցույց է տալիս, որ ուղին աշխատել է այդ հարցման համար այդ պահին, ոչ թե որ VPN է տեղադրված։

Սիմուլյատորը վերցնում է Mac-ը, իսկ մյուս հավելվածները մնում են անտեսանելի

Սիմուլյատորը սեփական ցանցային կույտ չունի. յուրաքանչյուր կապ, որ նա հաստատում է, Mac-ինն է։ Ուստի հյուրընկալող Mac-ի վրա աշխատող VPN-ն արդեն իսկ ուժի մեջ է սիմուլացված հավելվածի համար, և սիմուլյատորի սեփական կարգավորումները ոչինչ չեն ցույց տալիս։ Եթե թունելը բարձրացել է սիմուլյատորի մեկնարկից հետո, այն վերագործարկելը սովորաբար ավելի արագ է, քան հավելվածի վրիպազերծումը։ Ոչ ստանդարտ պորտով հոսթին անհրաժեշտ է այդ պորտը URL-ում, կամ տեղական վերահասցեավորում, ինչպես socat TCP-LISTEN:12345,fork TCP:host:12345-ը։

Հանրային API-ները չեն թվարկի VPN պրոֆիլներ, որոնք պատկանում են այլ հավելվածների կամ կարգավորման պրոֆիլների։ Մեկ հայտնի հավելվածի համար URL սխեմայի փորձարկումը canOpenURL-ի միջոցով տեղափոխելի հնարքն է, և iOS 9-ից ի վեր հարցվող սխեման պետք է հայտարարված լինի ձեր Info.plist-ում. եթե բաց թողնեք, կանչը կվերադարձնի false։ OpenVPN Connect-ը պատասխանում է openvpn://-ին, ինչը նրան դարձնում է լավ օրինակ և վատ ընդհանուր հայտնաբերիչ։

Միավորեք երեք դիտարկում և ասեք, թե ինչ են դրանք նշանակում

Գործնականում դասավորեք երեք արդյունք՝ կարգավորում, որը բեռնվել և միացված է, կապի վիճակ, որը անվավեր չէ, և հարցում հասցեին, որը հասանելի է միայն թունելով։ Յուրաքանչյուրը առանձին մոլորեցնում է. միասին նրանք ասում են, թե ինչ կարող է իմանալ հավելվածը, ոչ թե ինչ է ենթադրում օգտատերը։

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

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