Android VpnService පිළිබඳ උපකල්පන හතරක් වරක් මගේ සතියේ වැඩි කොටසක් වැය කළා, ඒවායින් එකක්වත් ජාල ප්‍රොටොකෝලය ගැන නොවීය. යෙදුම කීවේ සම්බන්ධයි කියාය, යතුරු නිරූපකය තත්ත්ව තීරුවේ වාඩි වී තිබුණි, සහ ට්‍රැෆික් තවමත් සාමාන්‍ය මාර්ගයෙන් පිටව ගියේය. මම උමග නතර කරන තෙක් එය මගේ යැයි, මා එකතු කළ මාර්ග ලැබෙන මාර්ග යැයි, සහ stopSelf ඇමතීමෙන් අතුරුමුහුණතද එක්ක බැස යනු ඇතැයි උපකල්පනය කරමින් සිටියෙමි. සේවාව හරියටම ලේඛනගත කර ඇති පරිදි හැසිරුණි. කැඩුණු කොටස මගේ මානසික ආකෘතියයි.

මිථ්‍යාව 1: ඔබ එය නතර කරන තෙක් උමග ඉහළින්ම පවතී

Android එක් වරකට එක් VPN අතුරුමුහුණතක් තබා ගනී. දෙවැන්නක් ස්ථාපිත කරන්න, වේදිකාව එය පෝලිමට නොදමයි: එය ඔබේ එක අක්‍රීය කර ඔබේ සේවාවේ onRevoke() අමතයි. ඔබේ කේතය බොත්තමක් එබූ විට පමණක් සියල්ල බිඳ දමන්නේ නම්, අත්පත් කර ගැනීමක් පිටුපස ඩෙස්ක්‍රිප්ටරයක් සහ කියවන තන්තුවක් ඉතිරි කරයි, ඊළඟ ආරම්භය දෙකම උරුම වේ.

VpnService යොමුව පැහැදිලිව කියන්නේ යෙදුමට දැනටමත් එකඟතාවයක් ඇත්නම් prepare() null ලෙස ආපසු දෙන බවත්, පරිශීලකයා තවම අනුමත කළ යුතු නම් Intent දෙන බවත් ය. එම එකඟතාවය ඔබ අභිප්‍රාය startActivityForResult() හරහා භාර දුන්නොත් පමණක් ලැබේ. මෙම භාරදීම මඟ හැරියොත් establish() null දෙයි, එය අවසර ගැටලුවක් ලෙස නොව නිහඬ අසාර්ථකත්වයක් ලෙස කියැවේ.

Always-on VPN ඔබ පාලනය නොකරන හිමිකරුවෙක් එකතු කරයි. පද්ධතියට ඇරඹුමකින් පසු හෝ ක්‍රැෂ් එකකින් පසු උමග ආපසු ගෙන ආ හැක, එය පරිශීලකයා අතින් ආරම්භ කළ VPN යෙදුමක් පසුකර යයි. onRevoke() ඔබේ සාමාන්‍ය වසා දැමීම මෙන් එම සම්පත්ම වසා දමන පරිදි ගොඩනඟන්න, එය කෙළවරේ අවස්ථාවක් නොව ප්‍රධාන නතර කිරීමේ මාර්ගයක් ලෙස සලකන්න. පරිශීලකයන් VPN යෙදුම් මාරු කරයි; ඔබේ කේතය එයට ඔරොත්තු දිය යුතුය.

මිථ්‍යාව 2: addRoute ඔබ ලැයිස්තුගත කළ දේ හරියටම අල්ලා ගනී

මාර්ග තීරණය කරන්නේ කුමන පැකට් ඔබේ ඩෙස්ක්‍රිප්ටරයට ළඟා වන්නේ ද කියාය, විෂය පථ දෝෂයක් ට්‍රැෆික් කොටසක් උමග හරහා යන අතර තවත් කොටසක් නොයන කේන්ති ගසන තත්ත්වය නිර්මාණය කරයි. addRoute("0.0.0.0", 0) සම්පූර්ණ IPv4 ගනී, එනම් දැන් සෑම පැකට් එකක්ම ඔබ වෙත පැමිණෙන අතර එය ඉදිරියට යැවිය යුතුයි නැතහොත් ඉවතලිය යුතුයි. එක් සත්කාරකයක් සඳහා /32 බොහෝ දුරට කිසිවක් ගන්නේ නැත, අනෙක් සියල්ල ඔබේ VPN කිසිදා ස්ථාපනය නොකළාක් මෙන් හැසිරේ.

පවුල් වෙන වෙනම ගණන් කරනු ලැබේ. IPv4 පමණක් වූ මාර්ගය IPv6 පාදක ජාලයේ තබයි, එබැවින් ද්වි-ස්ටැක් සත්කාරකයකට උමග ඇතුළත සම්පූර්ණයෙන් සම්බන්ධ ලෙස පෙනෙන අතරම පිටතින් නම විසඳා සම්බන්ධ විය හැක.

DNS එම තර්කයම අනුගමනය කරයි. addDnsServer() සමඟ එකතු කළ සේවාදායක උමගේ විසඳන්නා භාවිතා කරන යෙදුම් වෙත යයි, එහෙත් තමන්ගේම සංකේතනය කළ DNS අන්ත ලක්ෂ්‍යයක් හෝ සත්කාරක නාමයකට සකසන ලද Private DNS ඇති යෙදුමක් ඒවා සම්පූර්ණයෙන් නොසලකා හරියි. නම් එක් යෙදුමකට අසාර්ථක වී තවත් එකකට ක්‍රියා කරන විට, එක් මාර්ගයක්වත් ස්පර්ශ කිරීමට පෙර විසඳන්නාගේ මාර්ගය පරීක්ෂා කරන්න.

මිථ්‍යාව 3: යෙදුම් අනුව නීති යනු ඕනෑම පැත්තකට හැරවිය හැකි ස්විචයකි

addDisallowedApplication() සහ addAllowedApplication() පෙරහන් දෙකක් නොව මාදිලි දෙකකි. ගොඩනඟන්නා උමගකට එක් ආකෘතියක් පමණක් පිළිගනී, එබැවින් පැකේජ තුනක් හැර සියල්ල අවශ්‍ය යෙදුමක් තහනම් ලැයිස්තුව භාවිතා කර අනුමත ලැයිස්තුව හිස්ව තබයි. දෙකම එකිනෙක බැහැර කරයි, සහ සැකසුම් තිරය දැනටමත් ස්විච දෙකම පිරිනමා ඇති පසු පරිශීලකයන් එය ධාවන කාලයේදී දැනගනී.

පැකේජ දෘශ්‍යතාවද දෂ්ට කරයි. Android 11 සහ ඉන් පසු ඔබට නම් කළ හැක්කේ ඔබට පෙනෙන පැකේජ පමණි, එබැවින් ඔබේ යෙදුමට ධාවනය කිරීමට අවසර නැති විමසුමකින් ගොඩනගන ලද බැහැර කිරීමේ ලැයිස්තුවක් නිහඬව සටහන් මඟ හරියි. ලැයිස්තුව විශ්වාස කිරීමට පෙර එය පැකේජ කළමනාකරු සැබවින්ම ආපසු දෙන දෙය සමඟ සසඳන්න.

වැඩ පැතිකඩ ප්‍රේක්ෂකයා නැවත බෙදයි. පැතිකඩ තුළ ආරම්භ කළ උමගක් එම පැතිකඩ සහ එහි යෙදුම් ආවරණය කරයි, පුද්ගලික පැත්ත තමන්ගේ සම්බන්ධතාවය තබා ගනී. එය එක් වරක් ගන්නා විෂය පථ තීරණයක් වන අතර, එහි ස්ථානය අතුරුමුහුණතේ මිස සහාය ටිකෙට්ටුවේ නොවේ.

මිථ්‍යාව 4: stopSelf උමග අවසන් කරයි

නැත. අතුරුමුහුණත establish() ආපසු දෙන ඩෙස්ක්‍රිප්ටරයේ ජීවත් වේ, එම ඩෙස්ක්‍රිප්ටරය විවෘතව තිබියදී සේවා වස්තුව මිය යා හැක. පළමුව ParcelFileDescriptor වසන්න, යොමුව අත්හරින්න, කියවන සහ ලියන තන්තු එක් කරන්න හෝ බාධා කරන්න, පසුව stopForeground(true) සහ stopSelf() එම අනුපිළිවෙලින් අමතන්න.

අමතක වූ ඩෙස්ක්‍රිප්ටරයක් යනු සේවාවක් තමන්ගේම නතර කිරීමේ ඉල්ලීමෙන් ගැලවී ඇති බව පෙනෙන සාමාන්‍ය හේතුවයි, එය එය එකතු කළ යෙදුමට වඩා දිගු කල් ජීවත් වන පැරණි මාර්ගයක් ද පැහැදිලි කරයි.

ප්‍රතිවිරුද්ධ වැරැද්දද එතරම්ම සුලභය: කියවන තන්තුවක් කියවීමේ මැද සිටියදී ඩෙස්ක්‍රිප්ටරය වැසීම, පසුව කිසිවෙකු කේතයක් නොලියූ ව්‍යතිරේකයක් හැසිරවීමට එම තන්තුවට ඉඩ දීම. වසා දැමීමේ අනුපිළිවෙල එකම තැනක තබා පරිශීලක ක්‍රියාව සහ onRevoke() දෙකම එහි අමතන්නට සලස්වන්න.

උමග මළ ලෙස පෙනෙන විට පරීක්ෂා කළ යුතු දේ

උමග ඉහළ එන්නට පෙර දිගු ආයුෂැති සොකට් protect() සමඟ ආරක්ෂා කරන්න. එය නොමැතිව උමගේම ප්‍රවාහනය නැවත උමග තුළට මාර්ගගත වී සම්බන්ධතාවය සේවාදායක දෝෂයක් හා හරියටම සමාන ලෙස නතර වේ. දුරස්ථ ජාලය පිටුපස පමණක් පවතින ලිපිනයකට එරෙහිව පරීක්ෂා කරන්න, හැඹිලියෙන් හෝ පාදක මාර්ගයෙන් පිළිතුරු දෙන පොදු අඩවියකට එරෙහිව නොව.

establish() හි ප්‍රතිඵලය, මාර්ග, බැහැර කළ පැකේජ සහ වසා දැමීමේ හේතුව සටහන් කරන්න. එම පේළි හතර පැකට් ග්‍රහණයකින් තොරව එකඟතා ගැටලුවක් විෂය පථ ගැටලුවකින් සහ ජීවන චක්‍ර ගැටලුවකින් වෙන් කරයි.

අදාළ ලිපි