சுரங்கப்பாதையின் சொந்தப் பொதிகளைச் சுரங்கப்பாதைக்கு வெளியே வைத்திருக்க இரண்டு வழிகள் உள்ளன: போக்குவரத்துச் சாக்கெட்டைப் பாதுகாப்பது, அல்லது முழுச் செயலியையும் VPN-இலிருந்து வெளியேற்றுவது. அவை வெவ்வேறு சிக்கல்களைத் தீர்க்கின்றன; இணைப்பது எளிது என்பதற்காகவே பரந்ததைத் தேர்ந்தெடுப்பதுதான் செயலிகள் கவனிக்காமல் உள்ளூர் வலை அணுகலையும் பிரிக்கப்பட்ட DNS-ஐயும் இழக்கும் வழி. சுரங்கப்பாதைக்கு வெளியே இருக்க வேண்டியதை முதலில் தொடங்கி, அதை அடையும் மிகச் சிறிய எல்லையைத் தேர்ந்தெடுக்கவும்.

protect() சுரங்கப்பாதையிலிருந்து நீக்குவது என்ன

VpnService.protect() ஒரு சாக்கெட்டுக்கான அழைப்பு. சுரங்கப்பாதையை எடுத்துச் செல்லும் சாக்கெட்டையோ விவரிப்பையோ அதற்கு அளிக்கிறீர்கள்; Android அந்தச் சாக்கெட்டைக் குறித்து, அதன் போக்குவரத்து VPN இடைமுகத்திற்குப் பதிலாக அடிப்படை வலையைப் பயன்படுத்தும். செயலி அனுப்பும் மற்ற அனைத்தும் வழக்கமான VPN வழியைப் பின்பற்றுகிறது.

அந்தக் குறுகிய எல்லையே நோக்கம். பாதுகாக்கப்பட்ட சாக்கெட் உங்கள் HTTP வாடிக்கையாளர் பெயர்களை எவ்வாறு தீர்க்கிறது, உங்கள் பகுப்பாய்வு அழைப்புகள் எந்த இடைமுகத்தைப் பயன்படுத்துகின்றன, அல்லது பின்னர் திறக்கப்படும் இரண்டாவது இணைப்புக்கு என்ன நடக்கிறது என்பதை மாற்றாது.

எல்லையைத் தீர்மானிக்கும் மூன்று நிபந்தனைகள்

முதல் நிபந்தனை, சுரங்கப்பாதையின் போக்குவரத்து மட்டுமே வெளியேற வேண்டுமா என்பது. செயலியின் மற்றப் போக்குவரத்து இன்னும் VPN வழியாகவே செல்ல வேண்டுமெனில், சாக்கெட் பாதுகாப்பே சரியான எல்லை. இரண்டாவது நிபந்தனை, சாக்கெட் உருவாக்கத்தை நீங்கள் கட்டுப்படுத்துகிறீர்களா என்பது. தனக்குள் ஆழமாகத் தன் சொந்தச் சாக்கெட்டைத் திறக்கும் நூலகம், ஒரு கொக்கியை வெளிப்படுத்தாது அல்லது முன்பே கட்டப்பட்ட சாக்கெட்டை ஏற்காது எனில், protect() அழைக்க இடம் தராது. மூன்றாவது நிபந்தனை, செயலி உள்ளூர் வலையையோ பிடிமான வலைவாசலையோ நேரடியாக அடைய வேண்டுமா என்பது; அது சுரங்கப்பாதையை உயிர்ப்புடன் வைத்திருப்பதிலிருந்து வேறுபட்ட தேவை.

addDisallowedApplication() மூலம் செயலியை விலக்குவது மழுங்கிய கருவி. செயலி உருவாக்கும் ஒவ்வொரு இணைப்பையும், நீங்கள் ஆய்வு செய்ய விரும்பியவை உட்பட, VPN-இலிருந்து நீக்குகிறது; சில சாதனங்களில் உள்ளூர் கண்டுபிடிப்பு எவ்வாறு நடந்துகொள்கிறது என்பதையும் மாற்றுகிறது.

bindProcessToNetwork() அல்லது சாக்கெட் நிலை வலைக் கைப்பிடி மூலம் போக்குவரத்தைத் தேர்ந்தெடுத்த வலையில் பிணைப்பது மூன்றாவது வழி. சாதனத்தில் Wi-Fi-உம் செல்லுலாரும் ஒரே நேரத்தில் இருக்கும்போது, சுரங்கப்பாதை குறிப்பிட்ட மேல்நோக்கு இணைப்பு வழியாகச் செல்ல வேண்டுமெனில் இது பயனுள்ளது.

போக்குவரத்து உருவாகும் நேரத்திலேயே அழைக்கவும்

போக்குவரத்தை உருவாக்கும் அதே தொகுதியில், connect() அல்லது send()-க்கு முன் protect() அழைக்கவும். அழைப்பு false திருப்பினால், சாக்கெட்டை மூடி அமைப்பு தோல்வியடையட்டும்; தொடர்வது உங்கள் சொந்த இடைமுகத்திற்குள் அதன் பொதிகள் மீண்டும் நுழையக்கூடிய போக்குவரத்தை விட்டுச் செல்லும்.

வடிவம் ஒரே இடத்தில் வைத்திருக்கும் அளவுக்குச் சிறியது:

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

இங்கே மூன்று விவரங்கள் கடிக்கின்றன. முதலில், நீங்கள் பெறும் ஒரே சமிக்ஞை boolean மதிப்புதான், எனவே ரத்துசெய்யப்பட்ட ஒப்புதலை மறுக்கப்பட்ட அழைப்பிலிருந்து வேறுபடுத்தும் அளவு சூழலுடன் தோல்வியைப் பதிவு செய்யுங்கள். இரண்டாவது, protect() சாக்கெட்டை மூடுகிறது, விவரிப்பு எண்ணை அல்ல: சாக்கெட்டை மூடிவிட்டு பின்னர் அதே முழு எண்ணை வேறொரு சாக்கெட்டுக்குப் பயன்படுத்தினால், புதிய சாக்கெட் பாதுகாக்கப்படாது. மூன்றாவது, சொந்த நூலகம் போக்குவரத்தைத் திறக்கும்போது, சொந்தக் குறியீடு இணைவதற்கு முன் விவரிப்பைப் பாதுகாக்கவும், இல்லையேல் வழி ஏற்கனவே தேர்ந்தெடுக்கப்பட்டிருக்கலாம். உங்கள் இலக்கு API நிலை உண்மையில் வழங்கும் மிகை ஏற்றங்களை உறுதிப்படுத்தும் இடம் VpnService குறிப்பு.

தடுக்கப்பட்ட வழியையும் சோதிக்கவும், வெற்றி வழியை மட்டுமல்ல

சுரங்கப்பாதை இயங்கிக்கொண்டிருக்கும்போது சரிபார்க்கவும், ஏனெனில் இரு வழிகளும் வேறுபடக்கூடிய ஒரே நிலை அதுவே. பாதுகாக்கப்பட்ட போக்குவரத்தின் வழியாக ஒரு கோரிக்கையும், protect() ஒருபோதும் அழைக்காத குறியீட்டு வழியிலிருந்து மற்றொன்றையும் அனுப்பி, தொலை முனை காண்பதை ஒப்பிடுங்கள்: பாதுகாக்கப்பட்ட இணைப்பு அடிப்படை வலையை மூலமாகக் கொண்டு வர வேண்டும், பாதுகாக்கப்படாதது சுரங்கப்பாதையின் சொந்த முகவரியைக் காட்டி அதன் பைட் எண்ணிகளை நகர்த்துகிறது. சாதனத்தில், எதுவும் வானொலியை விட்டு வெளியேறும் முன் ss அல்லது netstat அதே பிரிவைக் காட்டும்.

ரத்துசெய்தலைத் தனியாகச் சோதிக்கவும், ஏனெனில் ஒப்புதல் மாற்றம் உங்கள் சாக்கெட் குறியீட்டைத் தொடாமல் இடைமுகத்தை உடைக்கிறது. VPN ஒப்புதலை ரத்துசெய்யவும் அல்லது சேவையை நிறுத்தவும், போக்குவரத்தை மீண்டும் கட்டமைத்து, protect() இன்னும் true திருப்புகிறதா, ஒப்புதல் மீண்டும் வழங்கப்பட்டதும் போக்குவரத்து மீண்டும் இணைகிறதா என்பதை உறுதிப்படுத்தவும்.

பாதுகாக்கப்பட்ட கோரிக்கை எப்படியும் சுரங்கப்பாதையைப் பின்பற்றினால், சாக்கெட் ஏற்கனவே வழிமாற்றப்பட்ட பிறகே பாதுகாப்பு அழைப்பு நடக்கிறது போலும். அதை முன்னதாக நகர்த்தி மீண்டும் சோதிக்கவும்.

முடிவைப் போக்குவரத்து அமைப்புக்கு அருகில் எழுதி வைக்கவும்: எந்தச் சாக்கெட்டுகள் பாதுகாக்கப்படுகின்றன, எந்தச் செயலிப் போக்குவரத்து விலக்கப்படுகிறது, பாதுகாப்பு தோல்வியடையும்போது செயலி என்ன செய்கிறது. ஒரு சோதனை தோல்வியடைந்ததால் பின்னர் வரும் மறுகட்டமைப்பு விலக்கலை முழுச் செயலிக்கும் விரிவாக்குவதைத் தடுப்பது அந்த வரியே. manifest-ஐப் பின்னோக்கிப் பொறியியல் செய்யாமல் அடுத்தவர் நோக்கத்தைச் சரிபார்க்கும் வழியையும் அது தருகிறது.

தொடர்புடைய கட்டுரைகள்