VpnService protect() jew l-esklużjoni tal-app: x'inhu jsewwi r-rotot
Ipproteġi s-socket li jġorr it-tunnel, jew eskludi l-app kollha: it-tliet kundizzjonijiet li jiddeterminaw liema firxa għandha bżonn il-VPN Android tiegħek.
Għandek żewġ modi biex iżżomm il-pakketti tat-tunnel stess barra mit-tunnel: tipproteġi s-socket tat-trasport, jew tneħħi l-app kollha mill-VPN. Dawn issolvu problemi differenti, u l-għażla tal-wiesgħa għax hi aktar faċli biex tqabbadha hija dak il-mod li bih l-apps jitilfu l-aċċess għan-netwerk lokali u d-DNS maqsum mingħajr ma jindunaw. Ibda minn dak li għandu jibqa' barra mit-tunnel, imbagħad agħżel l-iżgħar firxa li tilħaq dan.
X'ineħħi protect() mit-tunnel
VpnService.protect() hija sejħa għal kull socket. Tgħaddi lilha s-socket jew id-deskrittur li jġorr it-tunnel, u Android jimmarka dik is-socket biex it-traffiku tagħha juża n-netwerk ta' taħt minflok l-interface tal-VPN. Kull ħaġa oħra li l-app tibgħat xorta ssegwi r-rotta normali tal-VPN.
Propriu din il-firxa dejqa hija l-punt. Socket protett ma jbiddilx kif il-klijent HTTP tiegħek isolvi l-ismijiet, liema interface jużaw is-sejħiet analitiċi tiegħek, jew x'jiġri minn konnessjoni oħra miftuħa aktar tard.
Tliet kundizzjonijiet li jiddeterminaw il-firxa
L-ewwel kundizzjoni hija jekk hux biss it-trasport tat-tunnel li għandu joħroġ. Jekk it-traffiku l-ieħor tal-app għandu jgħaddi mill-VPN xorta, il-protezzjoni tas-socket hija l-firxa t-tajba. It-tieni kundizzjoni hija jekk tikkontrollax il-ħolqien tas-socket. Librerija li tiftaħ is-socket tagħha fil-fond ma tħallilekx post biex issejjaħ protect(), sakemm ma tesponix hook jew ma taċċettax socket diġà mibni. It-tielet kundizzjoni hija jekk l-app għandhiex tilħaq in-netwerk lokali jew captive portal direttament, li hija rekwiżit differenti milli żżomm it-tunnel ħaj.
L-esklużjoni tal-app b'addDisallowedApplication() hija l-għodda goffa. Tneħħi mill-VPN kull konnessjoni li tagħmel l-app, inklużi dawk li ridt tispezzjona, u fuq xi apparati tbiddel ukoll kif iġib ruħu s-sejbien lokali.
It-tielet għażla hija li torbot it-trasport ma' netwerk magħżul b'bindProcessToNetwork() jew manku tan-netwerk fil-livell tas-socket. Dan huwa utli meta l-apparat ikollu Wi-Fi u ċellulari fl-istess ħin u trid li t-tunnel jgħaddi minn uplink partikolari.
Sejħilha waqt li t-trasport qed jinħoloq
Sejjaħ protect() fl-istess blokka li toħloq it-trasport, qabel connect() jew send(). Jekk is-sejħa tirritorna false, agħlaq is-socket u falli s-setup; jekk tkompli tibqa' b'trasport li l-pakketti tiegħu jistgħu jerġgħu jidħlu fl-interface tiegħek stess.
Il-forma hija żgħira biżżejjed biex tinżamm f'post wieħed:
DatagramSocket transport = new DatagramSocket();
if (!protect(transport)) {
transport.close();
throw new IOException("transport not protected");
}
transport.connect(serverAddress);Tliet dettalji jigdim hawn. L-ewwel,il-boolean huwa l-uniku sinjal li tikseb, għalhekk irrapporta l-falliment b'kontekst biżżejjed biex tiddistingwi kunsens irrevokat minn sejħa miċħuda. It-tieni,protect() tkopri s-socket, mhux in-numru tad-deskrittur: jekk tagħlaq is-socket u aktar tard terġa' tuża l-istess integer għal socket ieħor, is-socket il-ġdid mhuwiex protett. It-tielet, meta librerija nattiva tiftaħ it-trasport, ipproteġi d-deskrittur qabel ma jikkonnettja l-kodiċi nattiv, inkella r-rotta tista' tkun diġà magħżula.Ir-referenza tal-VpnService hija l-post fejn tikkonferma liema overloads il-livell API fil-mira tiegħek tassew jipprovdi.
Ipprova r-rotta mblukkata, mhux biss dik ferrieħa
Ivverifika bit-tunnel 'il fuq, għax dak huwa l-uniku stat li fih iż-żewġ rotot jistgħu jvarjaw. Ibgħat talba waħda mit-trasport protett u oħra minn rotta tal-kodiċi li qatt ma sejħet protect(), imbagħad qabbel dak li jara t-tarf imbiegħed: il-konnessjoni protetta għandha tasal bin-netwerk ta' taħt bħala sors, filwaqt li dik mhux protetta turi l-indirizz tat-tunnel stess u ċċaqlaq il-kontaturi tal-bytes tat-tunnel. Fuq l-apparat,ss jew netstat juru l-istess qsim qabel ma xi ħaġa titlaq mir-radju.
Ipprova r-revoka separatament, għax bidla fil-kunsens twaqqa' l-interface mingħajr ma tmiss il-kodiċi tas-socket tiegħek. Irrevoka l-kunsens tal-VPN jew waqqaf is-servizz, erġa' ibni t-trasport, u kkonferma li protect() xorta jirritorna true u li t-trasport jerġa' jikkonnettja hekk kif il-kunsens jerġa' jingħata.
Jekk it-talba protetta xorta ssegwi t-tunnel, is-sejħa tal-protezzjoni x'aktarx isseħħ wara li s-socket tkun diġà ġiet irrotata. Mexxiha eqreb lejn il-bidu u erġa' pprova.
Żomm id-deċiżjoni miktuba ħdejn is-setup tat-trasport: liema sockets huma protetti, liema traffiku tal-app huwa eskluż, u x'tagħmel l-app meta l-protezzjoni tfalli. Dik il-linja hija dik li zżomm refactor aktar tard milli jwessa' l-esklużjoni għall-app kollha għax test wieħed kien qed ifalli. Tagħti wkoll lill-persuna li jmiss mod kif tivverifika l-intenzjoni mingħajr ma tagħmel reverse engineering tal-manifest.