VPN සේවාදායකයාගේම බ්‍රව්සරය එයට ළඟා වුවත් Android යෙදුමකට අභ්‍යන්තර නමක් විසඳිය නොහැකි අතර, එම බිල්ඩයම තවත් දුරකථනයක වැඩ කරයි. URL යනු විචල්‍යය නොවේ. විචල්‍යය යනු යෙදුමේ ක්‍රියාවලියට විසඳීම සඳහා භාවිත කළ හැකි ජාලය කුමක්ද යන්නයි, ඔබේ සොකට් භාවිත කරන ජාලයම සක්‍රීය VPN බව Android සහතික නොදේ. මෙම පරීක්ෂණ අනුපිළිවෙලින් කරන්න, resolver ස්නැප්ෂොට් ඔබේ උපකල්පනය සමඟ නොගැලපෙන විට නවතින්න.

පියවර 1: යෙදුම කුමන ජාලයේද යන්න සනාථ කරන්න

තත්ත්ව තීරුව නොව යෙදුමේම දර්ශනය කියවන්න. ConnectivityManager වෙතින් සක්‍රීය ජාලය, එහි LinkProperties, DNS සේවාදායක ලැයිස්තුව සහ පුද්ගලික DNS සැකසුම ලබා ගන්න. ලැයිස්තුවේ VPN හි resolver තිබේ නම් යෙදුමට එයට මාර්ගයක් ඇත; එහි Wi-Fi හි resolver තිබේ නම් එම ක්‍රියාවලියට ටනලය පෙරනිමි ජාලය නොවේ.

VPN නිරූපකය කියන්නේ ටනලයක් පවතින බව පමණි. එය යෙදුමේ ක්‍රියාවලිය එයට බැඳී තිබුණි යැයි නොකියයි, Android නම් විසඳීම සැමවිටම සක්‍රීය ලෙස පෙනෙන ජාලය හරහා යොමු නොකරයි. වෙනත් උපාංගයකට යොමු කරන දේශීය VPN යෙදුම්, අන්තර්ජාලය නැති Wi-Fi ජාල සහ නිෂ්පාදක බිල්ඩ යෙදුමට ටනලයේ සේවාදායක වෙනුවට පෙරනිමි resolver අසන්නට ඉඩ හැරිය හැක.

පියවර 2: VPN ප්‍රවාහනය ඉල්ලා ක්‍රියාවලිය බන්ධනය කරන්න

යෙදුමට ටනලයේ resolver අනිවාර්යයෙන් භාවිත කළ යුතු නම්, VPN ප්‍රවාහනය සහිත ජාලයක් ඉල්ලා කෝල්බැක් තුළ ක්‍රියාවලිය බන්ධනය කරන්න, එවිට ජාලය කවදා එයිද යන්න කේතය අනුමාන නොකරයි:

val request = NetworkRequest.Builder()
    .addTransportType(NetworkCapabilities.TRANSPORT_VPN)
    .build()

connectivityManager.requestNetwork(request, object : NetworkCallback() {
    override fun onAvailable(network: Network) {
        val bound = connectivityManager.bindProcessToNetwork(network)
        Log.i(TAG, "bound to VPN network: " + bound)
    }
})

මෙම ඇමතුම මුළු ක්‍රියාවලියේම පෙරනිමි ජාලය වෙනස් කරයි, එබැවින් ඉන් පසු සාදන සෑම සොකට් එකක්ම එය භාවිත කරයි. දැනටමත් ඇති සොකට් ඒවා සාදන ලද ජාලයම රඳවා ගනී, එබැවින් බන්ධනයට පෙර විවෘත කළ සම්බන්ධතා තටාකය පැරණි මාර්ගයෙන් විසඳීම දිගටම කරගෙන යා හැක. ආපසු දෙන අගය boolean වන අතර, false ප්‍රතිඵලය යනු බන්ධනය සිදු නොවූ බවයි; කෙටි ප්‍රමාදයකින් නැවත උත්සාහ කර උත්සාහ දෙකම ලොග් කරන්න.

පියවර 3: බන්ධනය අවශ්‍ය දෙයට පමණක් සීමා කරන්න

මුළු ක්‍රියාවලියේම බන්ධනය රළුය. ටෙලිමෙට්‍රි, යාවත්කාලීන පරීක්ෂණ සහ තෙවන පාර්ශව SDK ද ටනලයට යයි, ටනලයට අන්තර්ජාලය නැත්නම් ඒවා අසාර්ථක වීමට පටන් ගනී. එක් ඉල්ලීමකට ජාලයේ සොකට් කර්මාන්තශාලාව භාවිත කර අනෙක් සියල්ල උපාංගයේ පෙරනිමියේ තබන්න. හිතාමතා එක් ආකෘතියක් තෝරන්න: සම්බන්ධතාවයකට පටු බන්ධනයක්, නැතහොත් VPN අතුරුදහන් වූ විට පැහැදිලි ලෙස ගලවන ක්‍රියාවලි බන්ධනයක්.

resolver හි ලක්ෂණ දෙකකට කිසිදු දෝෂයකින් තොරව බන්ධනය පරාජය කළ හැක. දැඩි මාදිලියේ පුද්ගලික DNS විමසුම් ජාලයේ resolver වෙනුවට නම් සහිත DoT සේවාදායකයට යවයි, තමන්ගේම DNS-over-HTTPS සේවාලාභියා ගෙන එන යෙදුම පද්ධති resolver සම්පූර්ණයෙන් මඟ හරියි. බන්ධනය අසාර්ථක විය යැයි තීරණය කිරීමට පෙර දෙකම පරීක්ෂා කරන්න. VPN හි DNS සේවාදායකයට කිසිදා නොලැඟෙන විමසුමක් ටනලයේ පැත්තේ කිසිදු ලොගයක නොපෙනේ.

පියවර 4: CONNECTED සීමාව විශ්වාස නොකරන්න

WorkManager හි NetworkType.CONNECTED යනු ජාලයක් සම්බන්ධ වී ඇති බවයි, පහළින් ඇති Wi-Fi හෝ සෙලියුලර් සබැඳිය ගොස් තිබුණත් VPN ප්‍රවාහනය එය සපුරයි. කාර්යය ක්‍රියාත්මක වේ, සෑම ඉල්ලීමක්ම අසාර්ථක වේ, නැවත උත්සාහ කිරීමේ ප්‍රතිපත්තිය එය කාලසටහන් දෝෂයක් ලෙස පෙනෙන කුණාටුවක් බවට පත් කරයි. ටනලය යනු ජාලයකි; එම සීමාව කිසිදා අන්තර්ජාල පරීක්ෂාවක් නොවීය.

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

පියවර 5: සාක්ෂි වාර්තා කර පරාසය නැවත පරීක්ෂා කරන්න

තෝරාගත් ජාලයේ ප්‍රවාහන වර්ග, LinkProperties වෙතින් DNS සේවාදායක, බන්ධනය true ලෙස ආපසු දුන්නේද, සහ පළමු ඉල්ලීමේ නිශ්චිත අසාර්ථකත්වය ලොග් කරන්න. පසුව එම බන්ධනය යටතේ පුද්ගලික නමක් සහ පොදු නමක් ක්‍රියාත්මක කරන්න. එම යුගලය යෙදුම ටනලයේ resolver භාවිත කළේද නැතහොත් නිහඬව උපාංගයේ පෙරනිමියට වැටුණේද යන්න පෙන්වයි, එයයි පරිශීලකයාට දැනෙන වෙනස.

ඔබ සහාය දෙන පැරණිතම Android අනුවාදයේ සහ එක් වර්තමාන නිකුතුවක මෙය නැවත කරන්න. පෙරනිමි මාර්ගය නිවැරදි ලෙස පෙනෙන්නට සලස්වන resolver හැසිරීම උපාංග සහ අනුවාද වෙනස් වන නිශ්චිත ස්ථානයයි, නවතම පරීක්ෂණ උපාංගයේ පමණක් සමත් වන බිල්ඩය ඔබ යවන පරාසය සඳහා සත්‍යාපනය කර නැත. adb shell dumpsys connectivity යනු අසාර්ථකත්වය නැවත නිපදවන අතරතුර උපාංගය වාර්තා කරන ජාල සහ හැකියාවන් ඉක්මනින් තහවුරු කිරීමේ මාර්ගයකි.

අදාළ ලිපි