VpnService protect() edo aplikazioa baztertzea: zer konpontzen du bideratzeak
Babestu tunela daraman socketa edo baztertu aplikazio osoa: zure Android VPNak behar duen irismena erabakitzen duten hiru baldintzak.
Bi modu dituzu tunelaren beraren paketeak tunelaz kanpo edukitzeko: garraioaren socketa babestea edo aplikazio osoa VPNtik ateratzea. Arazo desberdinak konpontzen dituzte, eta zabalena aukeratzea konektatzeko errazagoa delako da aplikazioek sare lokaleko sarbidea eta DNS zatitua ohartu gabe galtzen duten modua. Hasi tunelaz kanpo egon behar duenaz, eta gero aukeratu hori lortzen duen irismenik txikiena.
Zer kentzen du protect()-ek tunelaz
VpnService.protect() socket bakoitzeko dei bat da. Tunela daraman socketa edo deskriptorea ematen diozu, eta Androidek socket hori markatzen du, bere trafikoak VPN interfazearen ordez azpiko sarea erabil dezan. Aplikazioak bidaltzen duen beste guztiak VPN bide arrunta jarraitzen du.
Irismen estua da kontua. Babestutako socketak ez du aldatzen zure HTTP bezeroak izenak nola ebazten dituen, zure analitika deiek zein interfaze erabiltzen duten edo geroago irekitako bigarren konexioarekin zer gertatzen den.
Irismena erabakitzen duten hiru baldintza
Lehen baldintza honakoa da: tunelaren garraioak bakarrik egin al du ihes behar. Aplikazioaren gainerako trafikoak VPNtik iragan behar badu, socketaren babesa da irismen egokia. Bigarren baldintza socketa sortzea kontrolatzen duzun ala ez da. Socket propioa sakonean irekitzen duen liburutegi batek ez dizu lekurik uzten protect() deitzeko, hook bat erakusten ez badu edo prestatutako socket bat onartzen ez badu. Hirugarren baldintza aplikazioak sare lokala edo captive portal bat zuzenean iritsi behar duen ala ez da, eta hori tunela bizirik edukitzea baino baldintza desberdina da.
Aplikazioa addDisallowedApplication()-rekin baztertzea tresna zakarra da. Aplikazioak VPNtik egiten duen konexio guztiak kentzen ditu, ikuskatu nahi zenituenenak barne, eta gailu batzuetan tokiko aurkikuntzaren portaera ere aldatzen du.
Hirugarren aukera garraioa aukeratutako sare batera lotzea da:bindProcessToNetwork() edo socket mailako sare-kirten batekin. Baliagarria da gailuak Wi-Fi eta mugikorra batera dituenean eta tunelak goranzko kanal jakin bat erabil dezan nahi duzunean.
Deitu garraioa sortzen ari den bitartean
Deitu protect() garraioa sortzen duen bloke berean,connect() edo send() aurretik. Deiak false itzultzen badu, itxi socketa eta huts egin ezarpenak; jarraitzeak paketeak zure interfaze propioan sartu daitezkeen garraioa uzten dizu.
Forma nahiko txikia da leku bakarrean edukitzeko:
DatagramSocket transport = new DatagramSocket();
if (!protect(transport)) {
transport.close();
throw new IOException("transport not protected");
}
transport.connect(serverAddress);Hiru xehetasunek hozka egiten dute hemen. Lehenik,boolearra jasotzen duzun seinale bakarra da, beraz erregistratu hutsegitea baimen ezeztatua eta dei ukatua bereizteko adinako testuinguruarekin. Bigarrenik,protect() socketak estaltzen ditu, ez deskriptorearen zenbakiak: socketa itxi eta geroago zenbaki oso bera beste socket baterako erabiltzen baduzu, socket berria ez da babestuta egongo. Hirugarrenik, liburutegi natiboa garraioa irekitzen duenean, babestu deskriptorea kodea natiboa konektatu aurretik, bestela bidea jada aukeratuta egon daiteke.VpnService erreferentzia zure helburuko API mailak benetan eskaintzen dituen gainkargak egiaztatzeko lekua da.
Proba ezazu bide blokeatua, ez soilik bide zoriontsua
Egiaztatu tunela altxatuta, bi bideek desberdin egin dezaketen egoera bakarra delako. Bidali eskaera bat babestutako garraioaren bidez eta beste bat inoiz protect() deitu ez zuen kode-bide batetik, eta gero konparatu urruneko muturrak ikusten duena: babestutako konexioak azpiko sarea jatorri gisa ekarri beharko luke, babestu gabeak tunelaren helbide propioa erakusten duen bitartean eta tunelaren byte-kontagailuak mugitzen. Gailuan,ss edo netstat erakusten du zatiketa bera, ezer irratitik irten aurretik.
Egiaztatu ezeztapena bereizita, baimen-aldaketak interfazea eraisten duelako zure socket-kodea ukitu gabe. Ezeztatu VPN baimena edo gelditu zerbitzua, berreraiki garraioa eta egiaztatu protect() oraindik true itzultzen duela eta garraioak berriro konektatzen duela baimena berriro ematen denean.
Babestutako eskaerak tunelari jarraitzen badio, babes-deia socketa jada bideratu ondoren gertatzen ari da ziurrenik. Mugitu lehenago eta probatu berriro.
Eduki erabakia idatzita garraioaren ezarpenaren ondoan: zein socket daude babestuta, zein aplikazio-trafiko dago baztertuta eta zer egiten duen aplikazioak babesak huts egiten duenean. Lerro hori da geroagoko berregituraketa batek bazterketa aplikazio osora hedatzea eragozten duena proba bat huts egiten ari zelako. Gainera, hurrengo pertsonari manifestua alderantziz ingeniaritzatu gabe asmoa egiaztatzeko modua ematen dio.