VpnService protect() ಅಥವಾ ಆ್ಯಪ್ ಹೊರಗಿಡುವಿಕೆ: ರೂಟಿಂಗ್ ಅನ್ನು ಯಾವುದು ಸರಿಪಡಿಸುತ್ತದೆ
ಟನೆಲ್ ಒಯ್ಯುವ ಸಾಕೆಟ್ ಅನ್ನು ರಕ್ಷಿಸಿ, ಅಥವಾ ಇಡೀ ಆ್ಯಪ್ ಅನ್ನು ಹೊರಗಿಡಿ: ನಿಮ್ಮ Android VPN ಗೆ ಎಷ್ಟು ವ್ಯಾಪ್ತಿ ಬೇಕು ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸುವ ಮೂರು ಷರತ್ತುಗಳು.
ಟನೆಲ್ನದೇ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಟನೆಲ್ನ ಹೊರಗೆ ಇಡಲು ಎರಡು ದಾರಿಗಳಿವೆ: ಸಾಗಣೆ ಸಾಕೆಟ್ ಅನ್ನು ರಕ್ಷಿಸುವುದು, ಅಥವಾ ಇಡೀ ಆ್ಯಪ್ ಅನ್ನು 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 ಹಿಂತಿರುಗಿಸುತ್ತದೆ ಮತ್ತು ಒಪ್ಪಿಗೆ ಮತ್ತೆ ಸಿಕ್ಕಾಗ ಸಾಗಣೆ ಮತ್ತೆ ಸಂಪರ್ಕಗೊಳ್ಳುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸಿ.
ರಕ್ಷಿತ ವಿನಂತಿ ಹೇಗಿದ್ದರೂ ಟನೆಲ್ ಅನ್ನು ಅನುಸರಿಸಿದರೆ, ರಕ್ಷಣಾ ಕರೆ ಸಾಕೆಟ್ ಈಗಾಗಲೇ ರೂಟ್ ಆದ ಮೇಲೆ ನಡೆಯುತ್ತಿದೆ. ಅದನ್ನು ಇನ್ನೂ ಮೊದಲಿಗೆ ಸರಿಸಿ ಮತ್ತು ಮತ್ತೆ ಪರೀಕ್ಷಿಸಿ.
ನಿರ್ಧಾರವನ್ನು ಸಾಗಣೆ ಸೆಟಪ್ನ ಪಕ್ಕದಲ್ಲಿ ಬರೆದಿಡಿ: ಯಾವ ಸಾಕೆಟ್ಗಳು ರಕ್ಷಿತ, ಯಾವ ಆ್ಯಪ್ ಸಂಚಾರ ಹೊರಗಿಡಲಾಗಿದೆ, ಮತ್ತು ರಕ್ಷಣೆ ವಿಫಲವಾದಾಗ ಆ್ಯಪ್ ಏನು ಮಾಡುತ್ತದೆ. ಆ ಸಾಲೇ ಒಂದು ಪರೀಕ್ಷೆ ವಿಫಲವಾದ ಕಾರಣ ಹೊರಗಿಡುವಿಕೆಯನ್ನು ಇಡೀ ಆ್ಯಪ್ಗೆ ವಿಸ್ತರಿಸದಂತೆ ಮುಂದಿನ ಮರುಸಂರಚನೆಯನ್ನು ತಡೆಯುತ್ತದೆ. ಅದು ಮುಂದಿನ ವ್ಯಕ್ತಿಗೆ ಮ್ಯಾನಿಫೆಸ್ಟ್ ಅನ್ನು ಹಿಮ್ಮುಖ ಎಂಜಿನಿಯರಿಂಗ್ ಮಾಡದೆಯೇ ಉದ್ದೇಶವನ್ನು ಪರಿಶೀಲಿಸುವ ದಾರಿಯನ್ನೂ ನೀಡುತ್ತದೆ.