Sandbox qilingan Mac ilovasida faol VPN ni aniqlash
Bu savol uchun ochiq API yo'q, interfeys nomi hiylasi esa faqat evristika. Ilovangiz aslida nimaga tayanishi kerakligini hal qilish uchun olti tekshiruv.
Tunnel yoqilganda boshqacha harakat qiladigan bitta ekran kerak, va buni sizga aytadigan chaqiruv yo'q. Bu chiqarish cheklovi: macOS da hech qanday ochiq freymvork ixtiyoriy VPN ulanganligini xabar qilmaydi, iOS da esa holat konfiguratsiyani o'rnatgan ilovaga tegishli. Quyidagi tekshiruvlar shu chegaradan chiqarishingiz mumkin bo'lgan narsagacha olib boradi va ularning har biri qidiruvni erta tugatishi mumkin.
Tekshiruv 1: savolga umuman javob berish mumkinmi?
Sandbox har qanday API dan oldin savolni hal qiladi. Uchinchi tomon jarayoni boshqa sotuvchining kengaytmasini sanab chiqa olmaydi va o'sha kengaytmaning konfiguratsiyasini ham o'qiy olmaydi, shuning uchun so'rash uchun qo'llab-quvvatlanadigan obyekt yo'q.
Har qanday chetlab o'tish bir xil devorga uriladi. Interfeys ro'yxatlari, scutil --nc list va tizim konfiguratsiyasini to'g'ridan-to'g'ri o'qish yo sandbox ushlab turgan ruxsatlarni talab qiladi yoki Apple hech qachon va'da qilmagan xatti-harakatga bog'liq. Agar rejaga shulardan biri kerak bo'lsa, muammo rejaning o'zida. Hujjatlashtirilmagan tafsilotga qurilgan funksiya yetkazib berish sanasi bor qo'llab-quvvatlash chiptasidir.
Tekshiruv 2: ilovangiz tunnelni o'zi boshqaradimi?
Agar shunday bo'lsa, o'z konfiguratsiyangiz uchun qo'llab-quvvatlanadigan javobingiz bor. Sozlamalarni yuklang, xatoni ishlang, so'ng holatni o'qing va so'rov o'tkazish o'rniga o'zgarishlarga obuna bo'ling:
vpnManager.loadFromPreferences { error in
// handle a load failure before reading status
}
NotificationCenter.default.addObserver(
forName: .NEVPNStatusDidChange,
object: nil,
queue: nil
) { note in
let status = (note.object as? NEVPNConnection)?.status
}Bu nima qaytarishiga aniq bo'ling: siz o'rnatgan tunnelning holati. Boshqa klient ishlatayotgan foydalanuvchi uzilgan deb ko'rinadi va bu sizning kodingizdagi xato emas. Javob ustiga qurishdan oldin funksiyangiz aslida shu ikki savoldan qaysi birini so'rayotganini hal qiling.
Tekshiruv 3: evristika sizga aslida nima aytadi?
Keng ko'chirilgan yondashuv tizim proksi lug'atidan uning qamrovli yozuvlarini so'raydi va interfeys nomlari bo'lib chiqadigan kalitlarni o'qiydi:
let settings = CFNetworkCopySystemProxySettings()?.takeRetainedValue() as NSDictionary?
let scoped = settings?["__SCOPED__"] as? [String: Any]
let names = scoped?.keys ?? []Kalit tap, tun, ppp, ipsec yoki utun bilan boshlansa, tunnel qamrovidagi interfeys mavjudligini bildiradi. To'liq nomni moslashtirish darhol muvaffaqiyatsiz bo'ladi, chunki iOS 12 utun1 va utun2 bilan kelgan va ba'zi profillar ipsec4, ppp0 yoki utun0 sifatida ko'rinadi. Buning o'rniga prefikslarni solishtiring.
Shunga qaramay, nom hech qanday egasini aniqlamaydi. Tizim funksiyalari va boshqa sotuvchilarning kengaytmalari ham utun interfeyslarini yaratadi va bittasi sizning trafigingizdan hech narsa tashimay turib mavjud bo'lishi mumkin. Buni atrofda tunnel shaklidagi narsa borligi haqidagi ishora sifatida o'qing, undan kuchliroq emas. Bu yerda noto'g'ri musbat arzon, agar siz faqat bitta funksiyani cheklab qo'ysangiz, va qimmat, agar kirish ekranini cheklab qo'ysangiz.
Tekshiruv 4: uning o'rniga manzilni sinab ko'ra olasizmi?
Agar ilova faqat ichki xizmatga yetish mumkinligini bilishi kerak bo'lsa, o'sha xizmatni sinab ko'ring. Taimaut bilan qisqa tekshiruv funksiya aslida bog'liq bo'lgan savolga javob beradi va foydalanuvchi klientni almashtirganda yoki tunnel shaklini o'zgartirganda ham ishlaydi.
Yetish imkoniyati sizning yo'lingiz haqidagi kuzatuvdir. Interfeys nomi yo'lingizga tutash narsa haqidagi xulosadir, shuning uchun evristika xato hisobotlarida bahs tug'diradi, tekshiruv esa dalil. Agar foydalanuvchi VPN yoniq deb turib olganda tekshiruv muvaffaqiyatsiz bo'lsa, endi disk raskadrovka qilish uchun aniq yo'lingiz bor: nomlarni hal qilish, marshrut yoki xizmat ruxsati.
Tekshiruv 5: platforma kerakli narsani majburlay oladimi?
Talab tunneldan hech narsa chiqmasligiga kafolat bo'lganda, profil o'sha joy, detektor emas. includeAllNetworks ni iOS 14 yoki undan keyingi versiyada to'liq tunnel konfiguratsiyasida yoqish ilovangizdan xulosa qilishni so'rash o'rniga platforma xatti-harakatini o'zgartiradi. Bayroq NEVPNProtocol ma'lumotnomasida hujjatlashtirilgan.
Bu boshqa turdagi javob: kuzatish o'rniga majburlash. U ham faqat siz nazorat qiladigan profillarga tegishli, shuning uchun boshqaning tunnelini kuzatayotgan iste'molchi ilovasiga yordam bermaydi.
Tekshiruv 6: muvaffaqiyatsizlikni xavfsiz va kuzatiladigan qiling
Faqat tunnel kerak bo'lgan qobiliyatni o'chiring va ilovaning qolgan qismini foydalanish mumkin qoldiring. Ishonchi komil bo'lmaganda butun interfeysni yashiradigan detektor siz hech qachon kutmagan nomdan foydalanadigan har bir kishining tunneliga uzilish yaratadi. Buning o'rniga konservativ xatti-harakatga qayting: mahalliy funksiyalar ishlashda davom etadi va faqat tunnelga haqiqatan kerak bo'lgan masofaviy chaqiruv o'chiriladi. Bu tanlov mahsulot qarori va u evristika yonida yozilishga loyiq.
Kuzatganlaringizni qayd eting: interfeys nomlari, platforma versiyasi va bitta tekshiruv natijasi. Bu keyingi hisobotni bahsdan tekshiruvga aylantiradi. Keyin qo'llab-quvvatlanadigan deklaratsiya mavjud bo'lgan joyda unga ustunlik bering, chunki boshqariladigan konfiguratsiya niyatni aniq tashishi va nomlarni tekshirish sababining ko'p qismini olib tashlashi mumkin.
Agar 1 dan 5 gacha tekshiruvlar sizni qo'llab-quvvatlanadigan javobsiz qoldirgan bo'lsa, tekshiruvni chiqaring va natijani halol belgilang. Hujjatlashtirilgan eng yaxshi harakat signali keyingi versiyada buziladigan xususiy API dan yaxshiroq mahsulot qaroridir.