Canfod VPN gweithredol y tu mewn i ap Mac â sandbox
Nid oes API gyhoeddus ar gyfer y cwestiwn hwn, a dim ond rhywbeth byrfyfyr yw'r tric enw rhyngwyneb. Chwe gwiriad i benderfynu ar beth y dylai eich ap ddibynnu mewn gwirionedd.
Mae arnoch angen un sgrin i ymddwyn yn wahanol pan fo'r twnnel i fyny, ac nid oes galwad yn dweud wrthych ei fod. Dyma'r cyfyngiad cludo: ar macOS nid oes unrhyw fframwaith cyhoeddus yn adrodd a yw VPN mympwyol wedi'i gysylltu, ac ar iOS mae'r statws yn perthyn i'r ap a osododd y ffurfweddiad. Mae'r gwiriadau isod yn cerdded o'r terfyn hwnnw at rywbeth y gallwch ei gludo, a gall unrhyw un ohonynt ddod â'r chwilio i ben yn gynnar.
Gwirio 1: a ellir ateb y cwestiwn o gwbl?
Mae sandboxio yn setlo'r cwestiwn cyn i unrhyw API wneud hynny. Ni all proses trydydd parti restru estyniad gwerthwr arall, ac ni all ddarllen ffurfweddiad yr estyniad hwnnw chwaith, felly nid oes gwrthrych a gefnogir i ofyn iddo.
Mae pob ffordd o osgoi yn taro'r un wal. Mae rhestrau rhyngwyneb, scutil --nc list a darlleniadau ffurfweddiad system uniongyrchol naill ai'n gofyn am hawliau y mae'r sandbox yn eu hatal neu'n dibynnu ar ymddygiad na addawodd Apple erioed. Os oes angen un o'r rheini ar y cynllun, y cynllun yw'r broblem. Mae nodwedd a adeiladwyd ar fanylion heb eu dogfennu yn docyn cymorth gyda dyddiad cyflwyno.
Gwirio 2: a yw eich ap yn rheoli'r twnnel ei hun?
Os yw, mae gennych ateb a gefnogir ar gyfer eich ffurfweddiad eich hun. Llwythwch y dewisiadau, triniwch y gwall, yna darllenwch y statws a thanysgrifiwch i newidiadau yn lle arolygu:
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
}Byddwch yn fanwl am yr hyn y mae hyn yn ei ddychwelyd: cyflwr y twnnel a osodwyd gennych. Bydd defnyddiwr sy'n rhedeg cleient gwahanol yn ymddangos fel un wedi'i ddatgysylltu, ac nid yw hynny'n nam yn eich cod. Penderfynwch pa un o'r ddau gwestiwn y mae eich nodwedd yn ei ofyn mewn gwirionedd cyn adeiladu ar yr ateb.
Gwirio 3: beth fyddai byrfyfyriad yn ei ddweud wrthych mewn gwirionedd?
Mae'r dull a gopïwyd yn eang yn gofyn i eiriadur dirprwy'r system am ei gofnodion cwmpas ac yn darllen yr allweddi, sydd o ran damwain yn enwau rhyngwyneb:
let settings = CFNetworkCopySystemProxySettings()?.takeRetainedValue() as NSDictionary?
let scoped = settings?["__SCOPED__"] as? [String: Any]
let names = scoped?.keys ?? []Mae allwedd sy'n dechrau gyda tap, tun, ppp, ipsec neu utun yn awgrymu bod rhyngwyneb â chwmpas twnnel yn bresennol. Mae paru'r enw cyfan yn methu ar unwaith, oherwydd daeth iOS 12 ag utun1 ac utun2 ac mae rhai proffiliau'n ymddangos fel ipsec4, ppp0 neu utun0. Cymharwch ragddodiaid yn lle hynny.
Er hynny, nid yw enw'n nodi unrhyw berchennog. Mae nodweddion system ac estyniadau gwerthwyr eraill hefyd yn creu rhyngwynebau utun, a gall un fodoli heb gario unrhyw ran o'ch traffig. Darllenwch ef fel awgrym bod rhywbeth ar ffurf twnnel o gwmpas, dim cryfach. Mae canlyniad ffug positif yma'n rhad os mai dim ond un nodwedd rydych yn ei chyfyngu, ac yn ddrud os ydych yn cyfyngu'r sgrin fewngofnodi.
Gwirio 4: a allwch brofi'r cyrchfan yn lle hynny?
Os mai dim ond gwybod a yw gwasanaeth mewnol yn gyrraeddadwy sydd ei angen ar yr ap, profwch y gwasanaeth hwnnw. Mae archwiliad byr gyda therfyn amser yn ateb y cwestiwn y mae'r nodwedd yn dibynnu arno mewn gwirionedd, ac mae'n parhau i weithio pan fydd y defnyddiwr yn newid cleient neu'r twnnel yn newid siâp.
Mae cyrraeddadwyedd yn arsylwi ar eich llwybr. Mae enw rhyngwyneb yn gasgliad am rywbeth sy'n gyfagos i'ch llwybr, a dyna pam mae'r byrfyfyriad yn cynhyrchu dadleuon mewn adroddiadau namau a'r archwiliad yn cynhyrchu tystiolaeth. Os bydd yr archwiliad yn methu tra bo'r defnyddiwr yn mynnu bod y VPN ymlaen, mae gennych lwybr penodol nawr i'w ddadfygio: datrysiad enwau, llwybr neu ganiatâd gwasanaeth.
Gwirio 5: a all y platfform orfodi'r hyn sydd ei angen arnoch?
Pan fo'r gofyniad yn warant na fydd unrhyw beth yn dianc o'r twnnel, y proffil yw'r lle iddo, nid y ddetector. Mae troi includeAllNetworks ymlaen mewn ffurfweddiad twnnel llawn ar iOS 14 neu'n hwyrach yn newid ymddygiad y platfform yn lle gofyn i'ch ap gasglu hynny. Mae'r faner wedi'i dogfennu yn cyfeirlyfr NEVPNProtocol.
Mae hwn yn fath gwahanol o ateb: gorfodi yn lle arsylwi. Dim ond ar broffiliau rydych yn eu rheoli y mae'n berthnasol hefyd, felly nid yw'n helpu ap defnyddwyr sy'n gwylio twnnel rhywun arall.
Gwirio 6: gwnewch y methiant yn ddiogel ac yn arsylwadwy
Diffoddwch yn unig y gallu sydd angen y twnnel a gadewch weddill yr ap yn ddefnyddiadwy. Mae detector sy'n cuddio'r rhyngwyneb cyfan pryd bynnag y mae'n ansicr yn cynhyrchu toriad i unrhyw un y mae ei dwnnel yn defnyddio enw na ragwelwyd gennych erioed. Dychwelwch at yr ymddygiad ceidwadol yn lle hynny: mae nodweddion lleol yn parhau i weithio a dim ond yr alwad bell sydd wir angen y twnnel sy'n cael ei hanalluogi. Penderfyniad cynnyrch yw'r dewis hwnnw, ac mae'n haeddu cael ei ysgrifennu wrth ymyl y byrfyfyriad.
Cofnodwch yr hyn a arsylwyd gennych: enwau rhyngwyneb, fersiwn y platfform a chanlyniad un archwiliad. Mae hynny'n troi'r adroddiad nesaf o ddadl yn wiriad. Yna ffafriwch ddatganiad a gefnogir lle mae gennych un, oherwydd gall ffurfweddiad a reolir gario'r bwriad yn benodol a dileu'r rhan fwyaf o'r rheswm dros archwilio enwau o gwbl.
Os yw gwiriadau 1 i 5 wedi'ch gadael heb ateb a gefnogir, cludwch yr archwiliad a labelwch y canlyniad yn onest. Mae signal ymdrech orau wedi'i dogfennu yn benderfyniad cynnyrch gwell nag API preifat sy'n torri yn y datganiad nesaf.