ਸੈਂਡਬਾਕਸ ਕੀਤੀ Mac ਐਪ ਵਿੱਚ ਸਰਗਰਮ VPN ਦੀ ਖੋਜ
ਇਸ ਸਵਾਲ ਲਈ ਕੋਈ ਜਨਤਕ API ਨਹੀਂ ਹੈ, ਅਤੇ ਇੰਟਰਫ਼ੇਸ-ਨਾਮ ਦੀ ਚਾਲ ਸਿਰਫ਼ ਇੱਕ ਹਿਊਰਿਸਟਿਕ ਹੈ। ਛੇ ਜਾਂਚਾਂ ਇਹ ਤੈਅ ਕਰਨ ਲਈ ਕਿ ਤੁਹਾਡੀ ਐਪ ਨੂੰ ਅਸਲ ਵਿੱਚ ਕਿਸ 'ਤੇ ਨਿਰਭਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।
ਤੁਹਾਨੂੰ ਇੱਕ ਸਕ੍ਰੀਨ ਚਾਹੀਦੀ ਹੈ ਜੋ ਟਨਲ ਚਾਲੂ ਹੋਣ 'ਤੇ ਵੱਖਰਾ ਵਿਵਹਾਰ ਕਰੇ, ਅਤੇ ਅਜਿਹੀ ਕੋਈ ਕਾਲ ਨਹੀਂ ਹੈ ਜੋ ਤੁਹਾਨੂੰ ਇਹ ਦੱਸੇ। ਇਹੀ ਸ਼ਿਪਿੰਗ ਸੀਮਾ ਹੈ: macOS 'ਤੇ ਕੋਈ ਜਨਤਕ ਫ਼ਰੇਮਵਰਕ ਇਹ ਨਹੀਂ ਦੱਸਦਾ ਕਿ ਕੋਈ ਵੀ VPN ਜੁੜਿਆ ਹੈ ਜਾਂ ਨਹੀਂ, ਅਤੇ iOS 'ਤੇ ਸਥਿਤੀ ਉਸ ਐਪ ਦੀ ਹੈ ਜਿਸ ਨੇ ਕਨਫ਼ਿਗਰੇਸ਼ਨ ਸਥਾਪਿਤ ਕੀਤੀ। ਹੇਠਾਂ ਦਿੱਤੀਆਂ ਜਾਂਚਾਂ ਉਸ ਸੀਮਾ ਤੋਂ ਉਸ ਚੀਜ਼ ਤੱਕ ਲੈ ਜਾਂਦੀਆਂ ਹਨ ਜੋ ਤੁਸੀਂ ਸ਼ਿਪ ਕਰ ਸਕਦੇ ਹੋ, ਅਤੇ ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ ਵੀ ਖੋਜ ਨੂੰ ਜਲਦੀ ਖ਼ਤਮ ਕਰ ਸਕਦੀ ਹੈ।
ਜਾਂਚ 1: ਕੀ ਇਸ ਸਵਾਲ ਦਾ ਜਵਾਬ ਦੇਣਾ ਸੰਭਵ ਹੈ?
ਸੈਂਡਬਾਕਸ ਕਿਸੇ ਵੀ API ਤੋਂ ਪਹਿਲਾਂ ਸਵਾਲ ਦਾ ਫ਼ੈਸਲਾ ਕਰ ਦਿੰਦਾ ਹੈ। ਤੀਜੀ ਧਿਰ ਦੀ ਪ੍ਰਕਿਰਿਆ ਕਿਸੇ ਹੋਰ ਵਿਕਰੇਤਾ ਦੇ ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਸੂਚੀਬੱਧ ਨਹੀਂ ਕਰ ਸਕਦੀ, ਅਤੇ ਉਸ ਐਕਸਟੈਂਸ਼ਨ ਦੀ ਕਨਫ਼ਿਗਰੇਸ਼ਨ ਵੀ ਨਹੀਂ ਪੜ੍ਹ ਸਕਦੀ, ਇਸ ਲਈ ਪੁੱਛਣ ਲਈ ਕੋਈ ਸਮਰਥਿਤ ਵਸਤੂ ਨਹੀਂ ਹੈ।
ਹਰ ਬਾਈਪਾਸ ਇੱਕੋ ਕੰਧ ਨਾਲ ਟਕਰਾਉਂਦਾ ਹੈ। ਇੰਟਰਫ਼ੇਸ ਸੂਚੀਆਂ, scutil --nc list ਅਤੇ ਸਿੱਧੀ ਸਿਸਟਮ-ਕਨਫ਼ਿਗਰੇਸ਼ਨ ਪੜ੍ਹਤ ਜਾਂ ਤਾਂ ਉਹ ਅਧਿਕਾਰ ਮੰਗਦੀ ਹੈ ਜੋ ਸੈਂਡਬਾਕਸ ਰੋਕ ਲੈਂਦਾ ਹੈ ਜਾਂ ਉਸ ਵਿਵਹਾਰ 'ਤੇ ਨਿਰਭਰ ਕਰਦੀ ਹੈ ਜੋ Apple ਨੇ ਕਦੇ ਵਾਅਦਾ ਨਹੀਂ ਕੀਤਾ। ਜੇ ਯੋਜਨਾ ਨੂੰ ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ ਚਾਹੀਦਾ ਹੈ, ਤਾਂ ਸਮੱਸਿਆ ਯੋਜਨਾ ਵਿੱਚ ਹੀ ਹੈ। ਗ਼ੈਰ-ਦਸਤਾਵੇਜ਼ੀ ਵੇਰਵੇ 'ਤੇ ਬਣੀ ਵਿਸ਼ੇਸ਼ਤਾ ਡਿਲਿਵਰੀ ਤਾਰੀਖ਼ ਵਾਲੀ ਸਹਾਇਤਾ ਟਿਕਟ ਹੈ।
ਜਾਂਚ 2: ਕੀ ਤੁਹਾਡੀ ਐਪ ਟਨਲ ਦਾ ਪ੍ਰਬੰਧਨ ਖ਼ੁਦ ਕਰਦੀ ਹੈ?
ਜੇ ਕਰਦੀ ਹੈ, ਤਾਂ ਤੁਹਾਡੀ ਆਪਣੀ ਕਨਫ਼ਿਗਰੇਸ਼ਨ ਲਈ ਤੁਹਾਡੇ ਕੋਲ ਸਮਰਥਿਤ ਜਵਾਬ ਹੈ। ਤਰਜੀਹਾਂ ਲੋਡ ਕਰੋ, ਗਲਤੀ ਸੰਭਾਲੋ, ਫਿਰ ਸਥਿਤੀ ਪੜ੍ਹੋ ਅਤੇ ਪੋਲਿੰਗ ਦੀ ਥਾਂ ਤਬਦੀਲੀਆਂ ਦੀ ਗਾਹਕੀ ਲਓ:
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
}ਇਹ ਕੀ ਵਾਪਸ ਕਰਦਾ ਹੈ ਇਸ ਬਾਰੇ ਸਟੀਕ ਰਹੋ: ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਥਾਪਿਤ ਟਨਲ ਦੀ ਹਾਲਤ। ਦੂਜਾ ਕਲਾਇੰਟ ਚਲਾਉਣ ਵਾਲਾ ਉਪਭੋਗਤਾ ਡਿਸਕਨੈਕਟ ਹੋਇਆ ਦਿਖੇਗਾ, ਅਤੇ ਇਹ ਤੁਹਾਡੇ ਕੋਡ ਵਿੱਚ ਬੱਗ ਨਹੀਂ ਹੈ। ਜਵਾਬ 'ਤੇ ਨਿਰਮਾਣ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਤੈਅ ਕਰੋ ਕਿ ਤੁਹਾਡੀ ਵਿਸ਼ੇਸ਼ਤਾ ਇਹਨਾਂ ਦੋ ਸਵਾਲਾਂ ਵਿੱਚੋਂ ਕਿਹੜਾ ਅਸਲ ਵਿੱਚ ਪੁੱਛ ਰਹੀ ਹੈ।
ਜਾਂਚ 3: ਹਿਊਰਿਸਟਿਕ ਅਸਲ ਵਿੱਚ ਤੁਹਾਨੂੰ ਕੀ ਦੱਸੇਗਾ?
ਵਿਆਪਕ ਤੌਰ 'ਤੇ ਨਕਲ ਕੀਤਾ ਢੰਗ ਸਿਸਟਮ ਪ੍ਰੌਕਸੀ ਸ਼ਬਦਕੋਸ਼ ਨੂੰ ਇਸ ਦੀਆਂ ਸਕੋਪਡ ਐਂਟਰੀਆਂ ਪੁੱਛਦਾ ਹੈ ਅਤੇ ਕੁੰਜੀਆਂ ਪੜ੍ਹਦਾ ਹੈ, ਜੋ ਸੰਜੋਗ ਨਾਲ ਇੰਟਰਫ਼ੇਸ ਨਾਮ ਹੁੰਦੀਆਂ ਹਨ:
let settings = CFNetworkCopySystemProxySettings()?.takeRetainedValue() as NSDictionary?
let scoped = settings?["__SCOPED__"] as? [String: Any]
let names = scoped?.keys ?? []ਜੋ ਕੁੰਜੀ tap, tun, ppp, ipsec ਜਾਂ utun ਨਾਲ ਸ਼ੁਰੂ ਹੁੰਦੀ ਹੈ, ਉਹ ਦੱਸਦੀ ਹੈ ਕਿ ਟਨਲ-ਸਕੋਪਡ ਇੰਟਰਫ਼ੇਸ ਮੌਜੂਦ ਹੈ। ਪੂਰਾ ਨਾਮ ਮਿਲਾਉਣਾ ਤੁਰੰਤ ਫੇਲ੍ਹ ਹੋ ਜਾਂਦਾ ਹੈ, ਕਿਉਂਕਿ iOS 12 utun1 ਅਤੇ utun2 ਨਾਲ ਆਇਆ ਅਤੇ ਕੁਝ ਪਰੋਫ਼ਾਈਲ ipsec4, ppp0 ਜਾਂ utun0 ਵਜੋਂ ਦਿਖਦੇ ਹਨ। ਇਸ ਦੀ ਥਾਂ ਪ੍ਰੀਫ਼ਿਕਸ ਦੀ ਤੁਲਨਾ ਕਰੋ।
ਫਿਰ ਵੀ ਨਾਮ ਕਿਸੇ ਮਾਲਕ ਦੀ ਪਛਾਣ ਨਹੀਂ ਕਰਦਾ। ਸਿਸਟਮ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਅਤੇ ਹੋਰ ਵਿਕਰੇਤਾਵਾਂ ਦੇ ਐਕਸਟੈਂਸ਼ਨ ਵੀ utun ਇੰਟਰਫ਼ੇਸ ਬਣਾਉਂਦੇ ਹਨ, ਅਤੇ ਇੱਕ ਤੁਹਾਡੇ ਟ੍ਰੈਫ਼ਿਕ ਦਾ ਕੁਝ ਵੀ ਲਿਜਾਏ ਬਿਨਾਂ ਵੀ ਹੋ ਸਕਦਾ ਹੈ। ਇਸ ਨੂੰ ਇਸ ਸੰਕੇਤ ਵਜੋਂ ਪੜ੍ਹੋ ਕਿ ਨੇੜੇ ਟਨਲ-ਆਕਾਰ ਦੀ ਕੋਈ ਚੀਜ਼ ਹੈ, ਇਸ ਤੋਂ ਵੱਧ ਨਹੀਂ। ਇੱਥੇ ਝੂਠਾ ਪਾਜ਼ਿਟਿਵ ਸਸਤਾ ਹੈ ਜੇ ਤੁਸੀਂ ਸਿਰਫ਼ ਇੱਕ ਵਿਸ਼ੇਸ਼ਤਾ ਗੇਟ ਕਰਦੇ ਹੋ, ਅਤੇ ਮਹਿੰਗਾ ਹੈ ਜੇ ਲੌਗਇਨ ਸਕ੍ਰੀਨ ਗੇਟ ਕਰਦੇ ਹੋ।
ਜਾਂਚ 4: ਕੀ ਤੁਸੀਂ ਇਸ ਦੀ ਥਾਂ ਮੰਜ਼ਿਲ ਦੀ ਪਰਖ ਕਰ ਸਕਦੇ ਹੋ?
ਜੇ ਐਪ ਨੂੰ ਸਿਰਫ਼ ਇਹ ਜਾਣਨਾ ਹੈ ਕਿ ਅੰਦਰੂਨੀ ਸੇਵਾ ਪਹੁੰਚਯੋਗ ਹੈ ਜਾਂ ਨਹੀਂ, ਤਾਂ ਉਸ ਸੇਵਾ ਦੀ ਪਰਖ ਕਰੋ। ਟਾਈਮਆਊਟ ਵਾਲੀ ਛੋਟੀ ਪ੍ਰੋਬ ਉਸ ਸਵਾਲ ਦਾ ਜਵਾਬ ਦਿੰਦੀ ਹੈ ਜਿਸ 'ਤੇ ਵਿਸ਼ੇਸ਼ਤਾ ਅਸਲ ਵਿੱਚ ਨਿਰਭਰ ਕਰਦੀ ਹੈ, ਅਤੇ ਉਪਭੋਗਤਾ ਦੇ ਕਲਾਇੰਟ ਬਦਲਣ ਜਾਂ ਟਨਲ ਦਾ ਆਕਾਰ ਬਦਲਣ 'ਤੇ ਵੀ ਕੰਮ ਕਰਦੀ ਰਹਿੰਦੀ ਹੈ।
ਪਹੁੰਚਯੋਗਤਾ ਤੁਹਾਡੇ ਰਾਹ ਬਾਰੇ ਇੱਕ ਨਿਰੀਖਣ ਹੈ। ਇੰਟਰਫ਼ੇਸ ਦਾ ਨਾਮ ਤੁਹਾਡੇ ਰਾਹ ਨਾਲ ਲੱਗਦੀ ਕਿਸੇ ਚੀਜ਼ ਬਾਰੇ ਇੱਕ ਅਨੁਮਾਨ ਹੈ, ਇਸੇ ਲਈ ਹਿਊਰਿਸਟਿਕ ਬੱਗ ਰਿਪੋਰਟਾਂ ਵਿੱਚ ਬਹਿਸ ਪੈਦਾ ਕਰਦਾ ਹੈ ਅਤੇ ਪ੍ਰੋਬ ਸਬੂਤ। ਜੇ ਉਪਭੋਗਤਾ VPN ਚਾਲੂ ਹੋਣ ਦੀ ਜ਼ਿੱਦ ਕਰਦਾ ਹੈ ਪਰ ਪ੍ਰੋਬ ਫੇਲ੍ਹ ਹੋ ਜਾਂਦੀ ਹੈ, ਤਾਂ ਹੁਣ ਡੀਬੱਗ ਕਰਨ ਲਈ ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਠੋਸ ਰਾਹ ਹੈ: ਨਾਮ-ਹੱਲ, ਰੂਟ ਜਾਂ ਸੇਵਾ ਇਜਾਜ਼ਤ।
ਜਾਂਚ 5: ਕੀ ਪਲੇਟਫ਼ਾਰਮ ਤੁਹਾਨੂੰ ਲੋੜੀਂਦੀ ਚੀਜ਼ ਲਾਗੂ ਕਰ ਸਕਦਾ ਹੈ?
ਜਦੋਂ ਲੋੜ ਇਹ ਗਾਰੰਟੀ ਹੋਵੇ ਕਿ ਟਨਲ ਵਿੱਚੋਂ ਕੁਝ ਵੀ ਨਹੀਂ ਨਿਕਲਦਾ, ਤਾਂ ਪਰੋਫ਼ਾਈਲ ਉਸ ਦੀ ਥਾਂ ਹੈ, ਡਿਟੈਕਟਰ ਨਹੀਂ। includeAllNetworks ਨੂੰ iOS 14 ਜਾਂ ਬਾਅਦ ਦੇ ਸੰਸਕਰਣ ਵਿੱਚ ਪੂਰੀ-ਟਨਲ ਕਨਫ਼ਿਗਰੇਸ਼ਨ ਵਿੱਚ ਚਾਲੂ ਕਰਨਾ ਤੁਹਾਡੀ ਐਪ ਨੂੰ ਅਨੁਮਾਨ ਲਾਉਣ ਲਈ ਕਹਿਣ ਦੀ ਥਾਂ ਪਲੇਟਫ਼ਾਰਮ ਦਾ ਵਿਵਹਾਰ ਬਦਲ ਦਿੰਦਾ ਹੈ। ਇਹ ਫ਼ਲੈਗ NEVPNProtocol ਹਵਾਲੇ ਵਿੱਚ ਦਸਤਾਵੇਜ਼ੀ ਹੈ।
ਇਹ ਵੱਖਰੀ ਕਿਸਮ ਦਾ ਜਵਾਬ ਹੈ: ਨਿਰੀਖਣ ਦੀ ਥਾਂ ਲਾਗੂ ਕਰਨਾ। ਇਹ ਵੀ ਸਿਰਫ਼ ਉਹਨਾਂ ਪਰੋਫ਼ਾਈਲਾਂ 'ਤੇ ਲਾਗੂ ਹੁੰਦਾ ਹੈ ਜੋ ਤੁਸੀਂ ਨਿਯੰਤਰਿਤ ਕਰਦੇ ਹੋ, ਇਸ ਲਈ ਇਹ ਕਿਸੇ ਹੋਰ ਦਾ ਟਨਲ ਦੇਖ ਰਹੀ ਖਪਤਕਾਰ ਐਪ ਦੀ ਮਦਦ ਨਹੀਂ ਕਰਦਾ।
ਜਾਂਚ 6: ਅਸਫਲਤਾ ਨੂੰ ਸੁਰੱਖਿਅਤ ਅਤੇ ਨਿਰੀਖਣਯੋਗ ਬਣਾਓ
ਸਿਰਫ਼ ਉਹ ਸਮਰੱਥਾ ਬੰਦ ਕਰੋ ਜਿਸ ਨੂੰ ਟਨਲ ਚਾਹੀਦਾ ਹੈ ਅਤੇ ਐਪ ਦਾ ਬਾਕੀ ਹਿੱਸਾ ਵਰਤੋਂਯੋਗ ਰੱਖੋ। ਜੋ ਡਿਟੈਕਟਰ ਪੱਕਾ ਨਾ ਹੋਣ 'ਤੇ ਪੂਰਾ ਇੰਟਰਫ਼ੇਸ ਲੁਕਾ ਦਿੰਦਾ ਹੈ, ਉਹ ਹਰ ਉਸ ਵਿਅਕਤੀ ਲਈ ਰੁਕਾਵਟ ਪੈਦਾ ਕਰਦਾ ਹੈ ਜਿਸ ਦਾ ਟਨਲ ਅਜਿਹਾ ਨਾਮ ਵਰਤਦਾ ਹੈ ਜਿਸ ਦੀ ਤੁਸੀਂ ਕਦੇ ਉਮੀਦ ਨਹੀਂ ਕੀਤੀ। ਇਸ ਦੀ ਥਾਂ ਰੂੜ੍ਹੀਵਾਦੀ ਵਿਵਹਾਰ 'ਤੇ ਵਾਪਸ ਜਾਓ: ਸਥਾਨਕ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਕੰਮ ਕਰਦੀਆਂ ਰਹਿੰਦੀਆਂ ਹਨ ਅਤੇ ਸਿਰਫ਼ ਉਹ ਦੂਰਸਥ ਕਾਲ ਅਯੋਗ ਹੁੰਦੀ ਹੈ ਜਿਸ ਨੂੰ ਸੱਚਮੁੱਚ ਟਨਲ ਚਾਹੀਦਾ ਹੈ। ਇਹ ਚੋਣ ਉਤਪਾਦ-ਫ਼ੈਸਲਾ ਹੈ, ਅਤੇ ਇਹ ਹਿਊਰਿਸਟਿਕ ਦੇ ਕੋਲ ਲਿਖੇ ਜਾਣ ਦੇ ਯੋਗ ਹੈ।
ਤੁਸੀਂ ਕੀ ਨਿਰੀਖਣ ਕੀਤਾ ਉਹ ਲੌਗ ਕਰੋ: ਇੰਟਰਫ਼ੇਸ ਨਾਮ, ਪਲੇਟਫ਼ਾਰਮ ਸੰਸਕਰਣ ਅਤੇ ਇੱਕ ਪ੍ਰੋਬ ਦਾ ਨਤੀਜਾ। ਇਹ ਅਗਲੀ ਰਿਪੋਰਟ ਨੂੰ ਬਹਿਸ ਤੋਂ ਜਾਂਚ ਵਿੱਚ ਬਦਲ ਦਿੰਦਾ ਹੈ। ਫਿਰ ਜਿੱਥੇ ਸਮਰਥਿਤ ਐਲਾਨ ਹੋਵੇ ਉਸ ਨੂੰ ਤਰਜੀਹ ਦਿਓ, ਕਿਉਂਕਿ ਪ੍ਰਬੰਧਿਤ ਕਨਫ਼ਿਗਰੇਸ਼ਨ ਇਰਾਦੇ ਨੂੰ ਸਪਸ਼ਟ ਰੂਪ ਵਿੱਚ ਲਿਜਾ ਸਕਦੀ ਹੈ ਅਤੇ ਨਾਮ ਜਾਂਚਣ ਦਾ ਬਹੁਤਾ ਕਾਰਨ ਹਟਾ ਸਕਦੀ ਹੈ।
ਜੇ 1 ਤੋਂ 5 ਤੱਕ ਦੀਆਂ ਜਾਂਚਾਂ ਨੇ ਤੁਹਾਨੂੰ ਸਮਰਥਿਤ ਜਵਾਬ ਤੋਂ ਬਿਨਾਂ ਛੱਡ ਦਿੱਤਾ, ਤਾਂ ਪ੍ਰੋਬ ਸ਼ਿਪ ਕਰੋ ਅਤੇ ਨਤੀਜੇ ਨੂੰ ਇਮਾਨਦਾਰੀ ਨਾਲ ਲੇਬਲ ਕਰੋ। ਦਸਤਾਵੇਜ਼ੀ ਸਰਵੋਤਮ-ਕੋਸ਼ਿਸ਼ ਸੰਕੇਤ ਅਗਲੀ ਰਿਲੀਜ਼ ਵਿੱਚ ਟੁੱਟਣ ਵਾਲੀ ਨਿੱਜੀ API ਨਾਲੋਂ ਬਿਹਤਰ ਉਤਪਾਦ-ਫ਼ੈਸਲਾ ਹੈ।