Ápù Android kan kò lè yanjú orúkọ inú kan nígbà tí aṣàwákiri ti VPN kliantì fúnra rẹ̀ dé ibẹ̀, àti pé ìkọ́ kan náà ń ṣiṣẹ́ lórí fọ́nù mìíràn. URL kì í ṣe àyípadà. Àyípadà ni nẹ́tíwọ́kì tí a gbà ìlànà ápù láàyè láti lò fún ìyanjú, àti pé Android kò ṣe ìdánilójú pé VPN tí ń ṣiṣẹ́ ni nẹ́tíwọ́kì tí àwọn socket rẹ ń lò. Ṣe àwọn àyẹ̀wò wọ̀nyí ní tẹ̀léntẹ̀lẹ́n kí o sì dúró nígbà tí àwòrán resolver kò bá bá èrò rẹ mu.

Ìgbésẹ̀ 1: fi hàn nẹ́tíwọ́kì tí ápù wà

Ka ìwòye ápù fúnra rẹ̀, kì í ṣe ọ̀pá ipò. Láti ConnectivityManager, gba nẹ́tíwọ́kì tí ń ṣiṣẹ́, LinkProperties rẹ̀, àkójọ àwọn server DNS àti ètò DNS aládàáni. Tí àkójọ náà bá ní resolver VPN, ápù ní ọ̀nà sí i; tí ó bá ní resolver Wi-Fi, ihò náà kì í ṣe nẹ́tíwọ́kì àkọ́kọ́ fún ìlànà yẹn.

Aàmì VPN kàn sọ pé ihò wà. Kò sọ pé a so ìlànà ápù mọ́ ọn, àti pé Android kì í ṣe é ní gbogbo ìgbà pé kí ó tọ́ ìyanjú orúkọ gba nẹ́tíwọ́kì tí ó dàbí ẹni ń ṣiṣẹ́. Àwọn ápù VPN àdúgbò tí ń fi sí ẹ̀rọ mìíràn, àwọn nẹ́tíwọ́kì Wi-Fi tí kò ní íńtánẹ́ẹ̀tì àti àwọn ìkọ́ olùpèsè lè jẹ́ kí ápù máa béèrè lọ́wọ́ resolver àkọ́kọ́ dípò àwọn server ihò náà.

Ìgbésẹ̀ 2: béèrè transport VPN kí o sì so ìlànà

Nígbà tí ápù gbọdọ̀ lo resolver ihò náà, béèrè nẹ́tíwọ́kì tí ó ní transport VPN kí o sì so ìlànà náà nínú callback, kí kóòdù má baà díwọ̀n ìgbà tí nẹ́tíwọ́kì yóò farahàn:

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)
    }
})

Ìpè náà yí nẹ́tíwọ́kì àkọ́kọ́ gbogbo ìlànà padà, nítorí náà gbogbo socket tí a bá dá lẹ́yìn náà yóò lò ó. Àwọn socket tí ó ti wà tẹ́lẹ̀ ń pa nẹ́tíwọ́kì tí a dá wọn sí mọ́, ìdí niyẹn tí àkójọ àsopọ̀ tí a ṣí kí ìsopọ̀ náà tó ṣẹlẹ̀ fi lè máa yanjú gba ọ̀nà àtijọ́. Iye tí ó ń padà jẹ́ boolean, àti pé àbájáde false túmọ̀ sí pé ìsopọ̀ náà kò ṣẹlẹ̀; tún gbìyànjú pẹ̀lú ìdádúró kúkúrú kí o sì ṣàkọọ́lẹ̀ àwọn ìgbìyànjú méjèèjì.

Ìgbésẹ̀ 3: fi ìsopọ̀ náà mọ́ ohun tí ó nílò rẹ̀

Ìsopọ̀ gbogbo ìlànà jẹ́ aláìlẹ́gbẹ́. Telemetry, àwọn àyẹ̀wò ìmúdójúìwọ̀n àti àwọn SDK ẹlẹ́ni kẹta pẹ̀lú ń lọ sí ihò náà, tí ihò náà kò bá sì ní íńtánẹ́ẹ̀tì wọ́n bẹ̀rẹ̀ sí kùnà. Fún ìbéèrè kan, lo socket factory nẹ́tíwọ́kì kí o sì fi ohun àkọ́kọ́ ẹ̀rọ náà sílẹ̀ fún gbogbo ohun mìíràn. Yan àwòṣe kan pẹ̀lú ìmọ̀: ìsopọ̀ dín fún gbogbo àsopọ̀, tàbí ìsopọ̀ ìlànà pẹ̀lú ìyọ́kúrò tí ó ṣe kedere nígbà tí VPN bá pàdánù.

Àwọn ẹ̀yà resolver méjì lè borí ìsopọ̀ náà láìsí àṣìṣe kankan. DNS aládàáni ní ipò líle ń fi àwọn ìbéèrè ránṣẹ́ sí server DoT tí ó ní orúkọ dípò resolver nẹ́tíwọ́kì, àti pé ápù tí ó mú kliantì DNS-over-HTTPS tirẹ̀ wá yóò forí gbogbo resolver ẹ̀rọ náà. Ṣàyẹ̀wò méjèèjì kí o tó parí pé ìsopọ̀ náà kùnà. Ìbéèrè tí kò bá dé server DNS VPN rárá kò ní farahàn nínú àkọsílẹ̀ kankan ní ẹ̀gbẹ́ ihò náà.

Ìgbésẹ̀ 4: má ṣe gbẹ́kẹ̀lé ààlà CONNECTED

NetworkType.CONNECTED nínú WorkManager túmọ̀ sí pé nẹ́tíwọ́kì kan so pọ̀, àti pé transport VPN ń mú àṣeparí rẹ̀ ṣẹ èyí pẹ̀lú nígbà tí Wi-Fi tàbí ìsopọ̀ alágbèéká tí ó wà nísàlẹ̀ ti lọ. Iṣẹ́ náà ń ṣiṣẹ́, gbogbo ìbéèrè ń kùnà, àti pé ìlànà àtúnwá yí i padà sí ìjì tí ó dàbí àṣìṣe ìṣètò. Ihò náà jẹ́ nẹ́tíwọ́kì; ààlà náà kì í ṣe àyẹ̀wò íńtánẹ́ẹ̀tì rárá.

Ṣàyẹ̀wò agbára tí iṣẹ́ náà nílò gan, bíi àǹfààní íńtánẹ́ẹ̀tì tí a ti jẹ́rìí, kí o sì pa ìlànà àtúnwá tí ó ní ààlà mọ́ pẹ̀lú ìpadàsẹ́yìn. Tí iṣẹ́ náà bá nílò orúkọ aládàáni, yanjú orúkọ yẹn nínú nẹ́tíwọ́kì tí a yàn kí o tó ṣe iṣẹ́ náà, kí o sì kùnà kíákíá pẹ̀lú àṣìṣe tí ó ṣe kedere dípò àtúnṣe ìbéèrè tí kò lè ṣàṣeyọrí.

Ìgbésẹ̀ 5: ṣàkọọ́lẹ̀ ẹ̀rí kí o sì tún ibùdó náà dán wò

Ṣàkọọ́lẹ̀ àwọn irú transport nẹ́tíwọ́kì tí a yàn, àwọn server DNS láti LinkProperties, bóyá ìsopọ̀ náà dá true padà, àti àkùnà gbára kan náà ti ìbéèrè àkọ́kọ́. Lẹ́yìn náà ṣe orúkọ aládàáni àti orúkọ gbogbo ènìyàn lábẹ́ ìsopọ̀ kan náà. Àkójọ méjèèjì yẹn fi hàn bóyá ápù náà lo resolver ihò náà tàbí ó padà ní ìdákẹ́jẹ́ sí àkọ́kọ́ ẹ̀rọ náà, ìyẹn sì ni ìyàtọ̀ tí olùlò ń rí.

Tún un ṣe lórí ẹ̀dá Android tí ó pẹ́ jùlọ tí o ń ṣètìlẹ́yìn fún àti lórí ìtẹ̀jáde lọ́wọ́lọ́wọ́ kan. Ìhùwàsí resolver tí ó mú kí ọ̀nà àkọ́kọ́ dàbí ẹni tí ó tọ́ ni ibi gan tí àwọn ẹ̀rọ àti ẹ̀dá yàtọ̀ síra, àti pé ìkọ́ tí ó kọjá lórí ẹ̀rọ ìdánwò tuntun nìkan kò ní ìjẹ́rìí fún ibùdó tí o ń fi ránṣẹ́. adb shell dumpsys connectivity jẹ́ ọ̀nà kíákíá láti jẹ́rìí àwọn nẹ́tíwọ́kì àti agbára tí ẹ̀rọ náà ń ròyìn nígbà tí o ń tún àkùnà náà ṣe.

Àwọn àpilẹ̀kọ tó jọra