ਟਨਲ ਦੇ ਆਪਣੇ ਪੈਕਟਾਂ ਨੂੰ ਟਨਲ ਤੋਂ ਬਾਹਰ ਰੱਖਣ ਦੇ ਦੋ ਤਰੀਕੇ ਹਨ: ਟਰਾਂਸਪੋਰਟ ਸਾਕਟ ਦੀ ਰੱਖਿਆ ਕਰੋ, ਜਾਂ ਪੂਰੀ ਐਪ ਨੂੰ VPN ਵਿੱਚੋਂ ਕੱਢ ਦਿਓ। ਇਹ ਵੱਖਰੀਆਂ ਸਮੱਸਿਆਵਾਂ ਹੱਲ ਕਰਦੇ ਹਨ, ਅਤੇ ਜੋੜਨਾ ਸੌਖਾ ਹੋਣ ਕਰਕੇ ਵੱਡਾ ਦਾਇਰਾ ਚੁਣਨਾ ਹੀ ਉਹ ਰਾਹ ਹੈ ਜਿਸ ਨਾਲ ਐਪਾਂ ਬਿਨਾਂ ਧਿਆਨ ਦਿੱਤੇ ਸਥਾਨਕ ਨੈੱਟਵਰਕ ਪਹੁੰਚ ਅਤੇ ਵੰਡਿਆ DNS ਗੁਆ ਦਿੰਦੀਆਂ ਹਨ। ਜੋ ਟਨਲ ਤੋਂ ਬਾਹਰ ਰਹਿਣਾ ਚਾਹੀਦਾ ਹੈ ਉਸ ਤੋਂ ਸ਼ੁਰੂ ਕਰੋ, ਫਿਰ ਉਹ ਸਭ ਤੋਂ ਛੋਟਾ ਦਾਇਰਾ ਚੁਣੋ ਜੋ ਇਹ ਹਾਸਲ ਕਰਦਾ ਹੈ।

protect() ਟਨਲ ਵਿੱਚੋਂ ਕੀ ਕੱਢਦਾ ਹੈ

VpnService.protect() ਹਰ ਸਾਕਟ ਲਈ ਇੱਕ ਕਾਲ ਹੈ। ਟਨਲ ਢੋਣ ਵਾਲਾ ਸਾਕਟ ਜਾਂ ਡਿਸਕ੍ਰਿਪਟਰ ਤੁਸੀਂ ਇਸ ਨੂੰ ਦਿੰਦੇ ਹੋ, ਅਤੇ Android ਉਸ ਸਾਕਟ ਨੂੰ ਨਿਸ਼ਾਨ ਲਗਾਉਂਦਾ ਹੈ ਤਾਂ ਜੋ ਇਸ ਦਾ ਟ੍ਰੈਫਿਕ VPN ਇੰਟਰਫੇਸ ਦੀ ਥਾਂ ਹੇਠਲੇ ਨੈੱਟਵਰਕ ਦੀ ਵਰਤੋਂ ਕਰੇ। ਐਪ ਜੋ ਬਾਕੀ ਸਭ ਭੇਜਦੀ ਹੈ ਉਹ ਆਮ VPN ਰਾਹ ਦੀ ਪਾਲਣਾ ਕਰਦੀ ਹੈ।

ਇਹੀ ਤੰਗ ਦਾਇਰਾ ਮੁੱਦਾ ਹੈ। ਸੁਰੱਖਿਅਤ ਸਾਕਟ ਇਹ ਨਹੀਂ ਬਦਲਦਾ ਕਿ ਤੁਹਾਡਾ HTTP ਕਲਾਇੰਟ ਨਾਵਾਂ ਨੂੰ ਕਿਵੇਂ ਹੱਲ ਕਰਦਾ ਹੈ, ਤੁਹਾਡੀਆਂ ਵਿਸ਼ਲੇਸ਼ਣ ਕਾਲਾਂ ਕਿਹੜਾ ਇੰਟਰਫੇਸ ਵਰਤਦੀਆਂ ਹਨ, ਜਾਂ ਬਾਅਦ ਵਿੱਚ ਖੁੱਲ੍ਹਣ ਵਾਲੇ ਦੂਜੇ ਕਨੈਕਸ਼ਨ ਦਾ ਕੀ ਹੁੰਦਾ ਹੈ।

ਦਾਇਰਾ ਤੈਅ ਕਰਨ ਵਾਲੀਆਂ ਤਿੰਨ ਸ਼ਰਤਾਂ

ਪਹਿਲੀ ਸ਼ਰਤ ਇਹ ਹੈ ਕਿ ਕੀ ਸਿਰਫ਼ ਟਨਲ ਦਾ ਟਰਾਂਸਪੋਰਟ ਬਾਹਰ ਜਾਣਾ ਹੈ। ਜੇ ਐਪ ਦਾ ਬਾਕੀ ਟ੍ਰੈਫਿਕ ਹਾਲੇ ਵੀ VPN ਵਿੱਚੋਂ ਲੰਘਣਾ ਚਾਹੀਦਾ ਹੈ, ਤਾਂ ਸਾਕਟ ਸੁਰੱਖਿਆ ਹੀ ਸਹੀ ਦਾਇਰਾ ਹੈ। ਦੂਜੀ ਸ਼ਰਤ ਇਹ ਹੈ ਕਿ ਕੀ ਸਾਕਟ ਬਣਾਉਣਾ ਤੁਹਾਡੇ ਕੰਟਰੋਲ ਵਿੱਚ ਹੈ। ਅੰਦਰ ਡੂੰਘੇ ਆਪਣਾ ਸਾਕਟ ਖੋਲ੍ਹਣ ਵਾਲੀ ਲਾਇਬ੍ਰੇਰੀ ਤੁਹਾਨੂੰprotect() ਕਾਲ ਕਰਨ ਦੀ ਥਾਂ ਨਹੀਂ ਦਿੰਦੀ, ਜਦ ਤੱਕ ਉਹ ਹੁੱਕ ਨਾ ਦੇਵੇ ਜਾਂ ਪਹਿਲਾਂ ਬਣਿਆ ਸਾਕਟ ਨਾ ਲਵੇ। ਤੀਜੀ ਸ਼ਰਤ ਇਹ ਹੈ ਕਿ ਕੀ ਐਪ ਨੂੰ ਸਿੱਧਾ ਸਥਾਨਕ ਨੈੱਟਵਰਕ ਜਾਂ captive portal ਤੱਕ ਪਹੁੰਚਣਾ ਹੈ, ਜੋ ਟਨਲ ਨੂੰ ਜੀਵਿਤ ਰੱਖਣ ਤੋਂ ਵੱਖਰੀ ਲੋੜ ਹੈ।

ਐਪ ਨੂੰaddDisallowedApplication() ਨਾਲ ਛੱਡਣਾ ਮੋਟਾ ਸਾਧਨ ਹੈ। ਇਹ ਐਪ ਵੱਲੋਂ ਕੀਤੇ ਹਰ ਕਨੈਕਸ਼ਨ ਨੂੰ VPN ਵਿੱਚੋਂ ਹਟਾ ਦਿੰਦਾ ਹੈ, ਉਹ ਵੀ ਜਿਨ੍ਹਾਂ ਦੀ ਤੁਸੀਂ ਜਾਂਚ ਕਰਨਾ ਚਾਹੁੰਦੇ ਸੀ, ਅਤੇ ਕੁਝ ਡਿਵਾਈਸਾਂ ਉੱਤੇ ਸਥਾਨਕ ਖੋਜ ਦਾ ਵਿਵਹਾਰ ਵੀ ਬਦਲ ਦਿੰਦਾ ਹੈ।

ਤੀਜਾ ਵਿਕਲਪ ਹੈ ਟਰਾਂਸਪੋਰਟ ਨੂੰ ਚੁਣੇ ਹੋਏ ਨੈੱਟਵਰਕ ਨਾਲ ਬੰਨ੍ਹਣਾ:bindProcessToNetwork() ਜਾਂ ਸਾਕਟ ਪੱਧਰ ਦੇ ਨੈੱਟਵਰਕ ਹੈਂਡਲ ਨਾਲ। ਇਹ ਤਦ ਲਾਹੇਵੰਦ ਹੈ ਜਦ ਡਿਵਾਈਸ ਵਿੱਚ ਇੱਕੋ ਸਮੇਂ Wi-Fi ਅਤੇ ਮੋਬਾਇਲ ਹੋਵੇ ਅਤੇ ਤੁਸੀਂ ਚਾਹੋ ਕਿ ਟਨਲ ਕਿਸੇ ਖਾਸ ਅੱਪਲਿੰਕ ਰਾਹੀਂ ਜਾਵੇ।

ਟਰਾਂਸਪੋਰਟ ਬਣਦੇ ਸਮੇਂ ਹੀ ਇਸ ਨੂੰ ਕਾਲ ਕਰੋ

ਕਾਲ ਕਰੋprotect() ਉਸੇ ਬਲਾਕ ਵਿੱਚ ਜੋ ਟਰਾਂਸਪੋਰਟ ਬਣਾਉਂਦਾ ਹੈ,connect() ਜਾਂsend() ਤੋਂ ਪਹਿਲਾਂ। ਜੇ ਕਾਲ false ਵਾਪਸ ਕਰਦੀ ਹੈ, ਤਾਂ ਸਾਕਟ ਬੰਦ ਕਰੋ ਅਤੇ ਸੈੱਟਅੱਪ ਨੂੰ ਅਸਫਲ ਕਰੋ; ਜਾਰੀ ਰੱਖਣ ਨਾਲ ਤੁਹਾਡੇ ਕੋਲ ਅਜਿਹਾ ਟਰਾਂਸਪੋਰਟ ਰਹਿ ਜਾਂਦਾ ਹੈ ਜਿਸ ਦੇ ਪੈਕਟ ਤੁਹਾਡੇ ਆਪਣੇ ਇੰਟਰਫੇਸ ਵਿੱਚ ਮੁੜ ਆ ਸਕਦੇ ਹਨ।

ਆਕਾਰ ਇੱਕੋ ਥਾਂ ਰੱਖਣ ਲਈ ਕਾਫ਼ੀ ਛੋਟਾ ਹੈ:

DatagramSocket transport = new DatagramSocket();
if (!protect(transport)) {
    transport.close();
    throw new IOException("transport not protected");
}
transport.connect(serverAddress);

ਇੱਥੇ ਤਿੰਨ ਵੇਰਵੇ ਡੰਗਦੇ ਹਨ। ਪਹਿਲਾ,ਬੂਲੀਅਨ ਹੀ ਉਹ ਇੱਕੋ-ਇੱਕ ਸੰਕੇਤ ਹੈ ਜੋ ਤੁਹਾਨੂੰ ਮਿਲਦਾ ਹੈ, ਇਸ ਲਈ ਅਸਫਲਤਾ ਨੂੰ ਇੰਨੇ ਸੰਦਰਭ ਨਾਲ ਦਰਜ ਕਰੋ ਕਿ ਵਾਪਸ ਲਈ ਗਈ ਸਹਿਮਤੀ ਅਤੇ ਰੱਦ ਕੀਤੀ ਕਾਲ ਵਿੱਚ ਫ਼ਰਕ ਪੈ ਸਕੇ। ਦੂਜਾ,protect() ਸਾਕਟ ਨੂੰ ਢਕਦਾ ਹੈ, ਡਿਸਕ੍ਰਿਪਟਰ ਨੰਬਰ ਨੂੰ ਨਹੀਂ: ਜੇ ਤੁਸੀਂ ਸਾਕਟ ਬੰਦ ਕਰਕੇ ਬਾਅਦ ਵਿੱਚ ਉਹੀ ਪੂਰਨ ਅੰਕ ਕਿਸੇ ਹੋਰ ਸਾਕਟ ਲਈ ਵਰਤੋ, ਤਾਂ ਨਵਾਂ ਸਾਕਟ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਹੁੰਦਾ। ਤੀਜਾ, ਜਦ ਨੇਟਿਵ ਲਾਇਬ੍ਰੇਰੀ ਟਰਾਂਸਪੋਰਟ ਖੋਲ੍ਹਦੀ ਹੈ, ਤਾਂ ਨੇਟਿਵ ਕੋਡ ਦੇ ਜੁੜਨ ਤੋਂ ਪਹਿਲਾਂ ਡਿਸਕ੍ਰਿਪਟਰ ਦੀ ਰੱਖਿਆ ਕਰੋ, ਨਹੀਂ ਤਾਂ ਰਾਹ ਪਹਿਲਾਂ ਹੀ ਚੁਣਿਆ ਜਾ ਚੁੱਕਾ ਹੋ ਸਕਦਾ ਹੈ।VpnService ਹਵਾਲਾ ਇਹ ਜਾਂਚਣ ਦੀ ਥਾਂ ਹੈ ਕਿ ਤੁਹਾਡਾ ਟਾਰਗਿਟ API ਪੱਧਰ ਅਸਲ ਵਿੱਚ ਕਿਹੜੇ ਓਵਰਲੋਡ ਦਿੰਦਾ ਹੈ।

ਸਿਰਫ਼ ਖੁਸ਼ਹਾਲ ਰਾਹ ਨਹੀਂ, ਰੋਕਿਆ ਹੋਇਆ ਰਾਹ ਵੀ ਪਰਖੋ

ਟਨਲ ਚਾਲੂ ਰੱਖ ਕੇ ਪੁਸ਼ਟੀ ਕਰੋ, ਕਿਉਂਕਿ ਦੋਵੇਂ ਰਾਹ ਸਿਰਫ਼ ਉਸੇ ਹਾਲਤ ਵਿੱਚ ਵੱਖਰੇ ਹੋ ਸਕਦੇ ਹਨ। ਸੁਰੱਖਿਅਤ ਟਰਾਂਸਪੋਰਟ ਰਾਹੀਂ ਇੱਕ ਬੇਨਤੀ ਭੇਜੋ ਅਤੇprotect() ਕਦੇ ਕਾਲ ਨਾ ਕਰਨ ਵਾਲੇ ਕੋਡ ਰਾਹ ਤੋਂ ਦੂਜੀ, ਫਿਰ ਤੁਲਨਾ ਕਰੋ ਕਿ ਦੂਰਲਾ ਸਿਰਾ ਕੀ ਵੇਖਦਾ ਹੈ: ਸੁਰੱਖਿਅਤ ਕਨੈਕਸ਼ਨ ਨੂੰ ਹੇਠਲੇ ਨੈੱਟਵਰਕ ਨੂੰ ਸਰੋਤ ਬਣਾ ਕੇ ਆਉਣਾ ਚਾਹੀਦਾ ਹੈ, ਜਦ ਕਿ ਅਸੁਰੱਖਿਅਤ ਕਨੈਕਸ਼ਨ ਟਨਲ ਦਾ ਆਪਣਾ ਪਤਾ ਦਿਖਾਉਂਦਾ ਹੈ ਅਤੇ ਟਨਲ ਦੇ ਬਾਈਟ ਕਾਊਂਟਰ ਹਿਲਾਉਂਦਾ ਹੈ। ਡਿਵਾਈਸ ਉੱਤੇss ਜਾਂnetstat ਰੇਡੀਓ ਤੋਂ ਕੁਝ ਨਿਕਲਣ ਤੋਂ ਪਹਿਲਾਂ ਹੀ ਉਹੀ ਵੰਡ ਦਿਖਾਉਂਦੇ ਹਨ।

ਰੱਦ ਕਰਨ ਦੀ ਜਾਂਚ ਵੱਖਰੀ ਕਰੋ, ਕਿਉਂਕਿ ਸਹਿਮਤੀ ਦੀ ਤਬਦੀਲੀ ਤੁਹਾਡੇ ਸਾਕਟ ਕੋਡ ਨੂੰ ਛੋਹਏ ਬਿਨਾਂ ਹੀ ਇੰਟਰਫੇਸ ਨੂੰ ਢਾਹ ਦਿੰਦੀ ਹੈ। VPN ਸਹਿਮਤੀ ਰੱਦ ਕਰੋ ਜਾਂ ਸੇਵਾ ਰੋਕੋ, ਟਰਾਂਸਪੋਰਟ ਮੁੜ ਬਣਾਓ ਅਤੇ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿprotect() ਹਾਲੇ ਵੀ true ਵਾਪਸ ਕਰਦਾ ਹੈ ਅਤੇ ਸਹਿਮਤੀ ਮੁੜ ਮਿਲਣ 'ਤੇ ਟਰਾਂਸਪੋਰਟ ਮੁੜ ਜੁੜ ਜਾਂਦਾ ਹੈ।

ਜੇ ਸੁਰੱਖਿਅਤ ਬੇਨਤੀ ਫਿਰ ਵੀ ਟਨਲ ਦਾ ਪਿੱਛਾ ਕਰੇ, ਤਾਂ ਸੁਰੱਖਿਆ ਕਾਲ ਸੰਭਵ ਤੌਰ 'ਤੇ ਸਾਕਟ ਦੇ ਰਾਊਟ ਹੋ ਚੁੱਕਣ ਮਗਰੋਂ ਹੁੰਦੀ ਹੈ। ਇਸ ਨੂੰ ਪਹਿਲਾਂ ਲਿਜਾਓ ਅਤੇ ਦੁਬਾਰਾ ਜਾਂਚੋ।

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

ਸੰਬੰਧਿਤ ਲੇਖ