ਕਿਸੇ iOS ਐਪ ਨੂੰ ਪੁੱਛੋ ਕਿ ਫ਼ੋਨ VPN ਉੱਤੇ ਹੈ ਜਾਂ ਨਹੀਂ, ਅਤੇ ਇਮਾਨਦਾਰ ਜਵਾਬ ਇਹ ਹੈ ਕਿ ਉਹ ਉਸ ਅਰਥ ਵਿੱਚ ਨਹੀਂ ਜਾਣ ਸਕਦੀ ਜੋ ਤੁਸੀਂ ਲੈ ਰਹੇ ਹੋ। SDK «ਡਿਵਾਈਸ ਸੁਰੰਗ ਵਿੱਚ ਹੈ» ਲਈ ਕੋਈ ਫਲੈਗ ਨਹੀਂ ਦਿੰਦਾ, ਅਤੇ ਜੋ ਨਿੱਜੀ ਇੰਟਰਫ਼ੇਸ ਇਸ ਦੇ ਨੇੜੇ ਜਾ ਸਕਦੇ ਸਨ, ਉਹ ਪ੍ਰਕਾਸ਼ਿਤ ਹੋਣ ਵਾਲੀਆਂ ਐਪਾਂ ਲਈ ਬੰਦ ਹਨ। ਤੁਸੀਂ ਆਪਣੀ ਐਪ ਦੀ ਆਪਣੀ ਕਨਫ਼ਿਗਰੇਸ਼ਨ, ਉਸ ਨਾਲ ਜੁੜੀ ਸਥਿਤੀ, ਅਤੇ ਨੈੱਟਵਰਕ ਸਟੈਕ ਤੋਂ ਇੱਕ-ਦੋ ਅਪ੍ਰਤੱਖ ਸੰਕੇਤ ਦੇਖ ਸਕਦੇ ਹੋ। ਹਰ ਇੱਕ ਵੱਖਰੇ ਸਵਾਲ ਦਾ ਜਵਾਬ ਦਿੰਦਾ ਹੈ, ਅਤੇ ਜ਼ਿਆਦਾਤਰ ਟੁੱਟੀਆਂ ਜਾਂਚਾਂ ਇਸੇ ਗੱਲ ਤੋਂ ਆਉਂਦੀਆਂ ਹਨ ਕਿ ਇਹਨਾਂ ਵਿੱਚੋਂ ਕਿਸੇ ਇੱਕ ਨੂੰ ਪੂਰਾ ਜਵਾਬ ਮੰਨ ਲਿਆ ਜਾਵੇ।

ਇੱਕੋ VPN ਫਲੈਗ ਦਾ ਮਿੱਥ

ਮਾਨਤਾ ਇਹ ਹੈ ਕਿ SDK ਵਿੱਚ ਕਿਤੇ ਕੋਈ ਪ੍ਰਾਪਰਟੀ ਹੈ ਜੋ ਦੱਸਦੀ ਹੈ ਕਿ ਡਿਵਾਈਸ ਸੁਰੰਗ ਵਿੱਚ ਹੈ ਜਾਂ ਨਹੀਂ, ਜਿਵੇਂ ਰੀਚਬਿਲਿਟੀ ਫਲੈਗ ਦੱਸਦਾ ਹੈ ਕਿ ਕੋਈ ਹੋਸਟ ਜਵਾਬ ਦੇ ਰਿਹਾ ਹੈ ਜਾਂ ਨਹੀਂ। ਅਜਿਹੀ ਕੋਈ ਜਨਤਕ ਪ੍ਰਾਪਰਟੀ ਨਹੀਂ ਹੈ। ਅਤੇ ਜੇ ਹੋਵੇ ਵੀ, ਤਾਂ «ਸੁਰੰਗ ਮੌਜੂਦ ਹੈ» ਅਤੇ «ਮੇਰੀ ਟ੍ਰੈਫ਼ਿਕ ਇਸ ਨੂੰ ਵਰਤਦੀ ਹੈ» ਵੱਖਰੇ ਦਾਅਵੇ ਹਨ, ਅਤੇ ਜ਼ਿਆਦਾਤਰ ਐਪਾਂ ਲਈ ਸਿਰਫ਼ ਦੂਜਾ ਮਾਇਨੇ ਰੱਖਦਾ ਹੈ।

ਇਹੀ ਖੱਪਾ ਉਹ ਕਾਰਨ ਹੈ ਕਿ ਇੱਕ-ਲਾਈਨ VPN ਡਿਟੈਕਟਰ ਦਾ ਇਸ਼ਤਿਹਾਰ ਦੇਣ ਵਾਲੀਆਂ ਲਾਇਬ੍ਰੇਰੀਆਂ ਆਮ ਤੌਰ 'ਤੇ ਕੁਝ ਨਾਜ਼ੁਕ ਪੜ੍ਹਦੀਆਂ ਹਨ, ਜਿਵੇਂ ਇੰਟਰਫ਼ੇਸ ਦਾ ਨਾਮ ਜਾਂ ਪ੍ਰੌਕਸੀ ਕੁੰਜੀ, ਅਤੇ ਉਸ ਨੂੰ ਫ਼ੈਸਲੇ ਵਜੋਂ ਪੇਸ਼ ਕਰਦੀਆਂ ਹਨ।

nil 'ਤੇ ਭਰੋਸਾ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਤਰਜੀਹਾਂ ਲੋਡ ਕਰੋ

ਸਾਂਝਾ ਮੈਨੇਜਰ ਇੰਸਟੈਂਸ ਤੁਹਾਡੇ ਮੰਗਦੇ ਹੀ ਮੌਜੂਦ ਹੁੰਦਾ ਹੈ, ਪਰ ਇਸ ਦੀ ਪ੍ਰੋਟੋਕੋਲ ਪ੍ਰਾਪਰਟੀ ਲੋਡ ਕਾਲਬੈਕ ਪੂਰਾ ਹੋਣ ਤੱਕ nil ਰਹਿੰਦੀ ਹੈ। ਇਸ ਲਈ 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 ਪ੍ਰੋਫ਼ਾਈਲ ਸੂਚੀਬੱਧ ਨਹੀਂ ਕਰਨਗੀਆਂ। ਇੱਕ ਜਾਣੀ-ਪਛਾਣੀ ਐਪ ਲਈ canOpenURL ਰਾਹੀਂ URL ਸਕੀਮ ਜਾਂਚ ਹੀ ਢੋਣਯੋਗ ਜੁਗਤ ਹੈ, ਅਤੇ iOS 9 ਤੋਂ ਪੁੱਛੀ ਗਈ ਸਕੀਮ ਤੁਹਾਡੀ Info.plist ਵਿੱਚ ਘੋਸ਼ਿਤ ਕਰਨੀ ਪੈਂਦੀ ਹੈ; ਛੱਡ ਦਿਓ ਤਾਂ ਕਾਲ false ਮੋੜਦੀ ਹੈ। OpenVPN Connect openvpn:// 'ਤੇ ਜਵਾਬ ਦਿੰਦਾ ਹੈ, ਜੋ ਇਸ ਨੂੰ ਚੰਗੀ ਉਦਾਹਰਨ ਅਤੇ ਮਾੜਾ ਆਮ ਡਿਟੈਕਟਰ ਬਣਾਉਂਦਾ ਹੈ।

ਤਿੰਨ ਨਿਰੀਖਣ ਜੋੜੋ ਅਤੇ ਦੱਸੋ ਕਿ ਉਹਨਾਂ ਦਾ ਕੀ ਅਰਥ ਹੈ

ਵਿਵਹਾਰ ਵਿੱਚ ਤਿੰਨ ਨਤੀਜੇ ਇਕੱਠੇ ਕਰੋ: ਲੋਡ ਹੋਈ ਅਤੇ ਸਮਰੱਥ ਕਨਫ਼ਿਗਰੇਸ਼ਨ, ਅਵੈਧ ਨਾ ਹੋਣ ਵਾਲੀ ਕਨੈਕਸ਼ਨ ਸਥਿਤੀ, ਅਤੇ ਸਿਰਫ਼ ਸੁਰੰਗ ਰਾਹੀਂ ਪਹੁੰਚਣ ਵਾਲੇ ਪਤੇ 'ਤੇ ਬੇਨਤੀ। ਹਰ ਇੱਕ ਇਕੱਲਾ ਭਰਮਾਉਂਦਾ ਹੈ; ਇਕੱਠੇ ਮਿਲ ਕੇ ਉਹ ਦੱਸਦੇ ਹਨ ਕਿ ਐਪ ਕੀ ਜਾਣ ਸਕਦੀ ਹੈ, ਇਹ ਨਹੀਂ ਕਿ ਵਰਤੋਂਕਾਰ ਕੀ ਮੰਨਦਾ ਹੈ।

ਨਤੀਜੇ ਨੂੰ ਆਪਣੇ ਡਾਇਗਨੋਸਟਿਕਸ ਵਿੱਚ ਇੱਕ boolean ਵਜੋਂ ਨਹੀਂ, ਤਿੰਨ ਲਾਈਨਾਂ ਵਜੋਂ ਲਿਖੋ। ਜਦੋਂ ਵਰਤੋਂਕਾਰ ਕਹਿੰਦਾ ਹੈ ਕਿ VPN ਬੰਦ ਹੈ ਅਤੇ ਤੁਹਾਡੀ ਐਪ ਸਹਿਮਤ ਨਹੀਂ ਹੁੰਦੀ, ਤਾਂ ਤਿੰਨ ਲਾਈਨਾਂ ਦੱਸਦੀਆਂ ਹਨ ਕਿ ਕਿਹੜਾ ਨਿਰੀਖਣ ਵੱਖਰਾ ਪਿਆ, ਅਤੇ ਇਹੀ ਫ਼ਰਕ ਹੈ ਉਸ ਸਹਾਇਤਾ ਟਿਕਟ ਵਿੱਚ ਜਿਸ 'ਤੇ ਤੁਸੀਂ ਕਾਰਵਾਈ ਕਰ ਸਕਦੇ ਹੋ ਅਤੇ ਉਸ ਵਿੱਚ ਜੋ «ਮੇਰੇ ਕੋਲ ਚੱਲਦਾ ਹੈ» ਨਾਲ ਖ਼ਤਮ ਹੁੰਦੀ ਹੈ।

ਸੰਬੰਧਿਤ ਲੇਖ