VpnService protect() ද, යෙදුම බැහැර කිරීම ද: මාර්ග නිර්ණය නිවැරදි කරන්නේ කුමක් ද
ටියුනලය ගෙන යන සොකට් එක ආරක්ෂා කරන්න, නැතහොත් මුළු යෙදුමම VPN එකෙන් ඉවත් කරන්න: ඔබේ Android VPN එකට අවශ්ය විෂය පථය තීරණය කරන කොන්දේසි තුන.
ටියුනලයේම පැකට් ටියුනලයෙන් පිටත තබා ගැනීමට ඔබට ක්රම දෙකක් ඇත: ප්රවාහන සොකට් එක ආරක්ෂා කිරීම, නැතහොත් මුළු යෙදුමම 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 එක ප්රතිවිරුද්ධ ඉංජිනේරුකරණයකින් තොරව අභිප්රාය පරීක්ෂා කිරීමට මාර්ගයක් ද ලබා දෙයි.