Mae gennych ddau ffordd o gadw pecynnau'r tiwnel ei hun y tu allan i'r tiwnel: diogelu'r soced cludo, neu dynnu'r ap cyfan allan o'r VPN. Maen nhw'n datrys problemau gwahanol, a dewis yr un ehangach am ei fod yn haws ei gysylltu yw'r ffordd y mae apiau'n colli mynediad i'r rhwydwaith lleol a DNS hollt heb sylwi. Dechreuwch o'r hyn sy'n rhaid iddo aros y tu allan i'r tiwnel, yna dewiswch y cwmpas lleiaf sy'n cyflawni hynny.

Beth mae protect() yn ei dynnu o'r tiwnel

VpnService.protect() yw galwad fesul soced. Rydych yn rhoi'r soced neu'r disgrifydd sy'n cario'r tiwnel iddo, ac mae Android yn marcio'r soced hwnnw fel bod ei draffig yn defnyddio'r rhwydwaith sylfaenol yn lle rhyngwyneb y VPN. Mae popeth arall y mae'r ap yn ei anfon yn dal i ddilyn llwybr arferol y VPN.

Y cwmpas cul hwnnw yw'r pwynt. Nid yw soced wedi'i ddiogelu yn newid sut mae eich cleient HTTP yn datrys enwau, pa ryngwyneb y mae eich galwadau dadansoddi yn ei ddefnyddio, na beth sy'n digwydd i ail gysylltiad a agorir yn ddiweddarach.

Tri amod sy'n penderfynu'r cwmpas

Yr amod cyntaf yw a oes rhaid i gludiant y tiwnel yn unig ddianc. Os dylai traffig arall yr ap fynd trwy'r VPN o hyd, diogelu soced yw'r cwmpas cywir. Yr ail amod yw a ydych yn rheoli creu soced. Nid yw llyfrgell sy'n agor ei soced ei hun yn ddwfn y tu mewn yn rhoi lle i chi alw protect() oni bai ei bod yn datgelu bachyn neu'n derbyn soced wedi'i hadeiladu eisoes. Y trydydd amod yw a oes rhaid i'r ap gyrraedd y rhwydwaith lleol neu borth y captive portal yn uniongyrchol, sy'n ofyniad gwahanol i gadw'r tiwnel yn fyw.

Eithrio'r ap gyda addDisallowedApplication() yw'r teclyn di-liw. Mae'n tynnu pob cysylltiad y mae'r ap yn ei wneud allan o'r VPN, gan gynnwys y rhai roeddech am eu harchwilio, ac ar rai dyfeisiau mae hefyd yn newid sut mae darganfod lleol yn ymddwyn.

Trydedd opsiwn yw rhwymo'r cludiant i rwydwaith dethol gyda bindProcessToNetwork() neu ddolen rwydwaith ar lefel soced. Mae hynny'n ddefnyddiol pan fo'r ddyfais yn cael Wi-Fi a symudol ar yr un pryd ac rydych am i'r tiwnel fynd dros gyswllt uwchlwytho penodol.

Galwch ef tra bo'r cludiant yn cael ei greu

Galwch protect() yn yr un bloc sy'n creu'r cludiant, cyn connect() neu send(). Os yw'r alwad yn dychwelyd false, caewch y soced a gwnewch i'r gosodiad fethu; mae parhau yn eich gadael gyda chludiant y gall ei becynnau ail-fynd i mewn i'ch rhyngwyneb eich hun.

Mae'r siâp yn ddigon bach i'w gadw mewn un man:

DatagramSocket transport = new DatagramSocket();
if (!protect(transport)) {
    transport.close();
    throw new IOException("transport not protected");
}
transport.connect(serverAddress);

Mae tri manylyn yn brathu yma. Yn gyntaf,y boolean yw'r unig signal a gewch, felly cofnodwch y methiant gyda digon o gyd-destun i wahaniaethu caniatâd wedi'i ddirymu oddi wrth alwad a wrthodwyd. Yn ail,protect() mae'n gorchuddio'r soced, nid rhif y disgrifydd: os caewch y soced ac wedyn ailddefnyddio'r un cyfanrif ar gyfer soced arall, nid yw'r soced newydd wedi'i ddiogelu. Yn drydydd, pan fo llyfrgell frodorol yn agor y cludiant, diogelwch y disgrifydd cyn i'r cod brodorol gysylltu, neu efallai bod y llwybr eisoes wedi'i ddewis.Cyfeirlyfr VpnService yw'r man i gadarnhau pa orlwythiadau y mae eich lefel API darged yn eu darparu mewn gwirionedd.

Profwch y llwybr wedi'i rwystro, nid y llwybr hapus yn unig

Gwiriwch gyda'r tiwnel i fyny, oherwydd dyna'r unig gyflwr lle gall y ddau lwybr wahaniaethu. Anfonwch un cais trwy'r cludiant wedi'i ddiogelu ac un o lwybr cod na alwodd byth protect(), yna cymharwch beth mae'r pen pell yn ei weld: dylai'r cysylltiad wedi'i ddiogelu gyrraedd gyda'r rhwydwaith sylfaenol yn ffynhonnell, tra bod yr un heb ei ddiogelu yn dangos cyfeiriad y tiwnel ei hun ac yn symud ei fesuryddion beit. Ar y ddyfais,ss neu netstat yn dangos yr un hollt cyn i unrhyw beth adael y radio.

Profwch ddirymu ar wahân, oherwydd mae newid caniatâd yn dymchwel y rhyngwyneb heb gyffwrdd â'ch cod soced. Dirymwch ganiatâd y VPN neu stopiwch y gwasanaeth, ailadeiladwch y cludiant, a chadarnhewch fod protect() yn dal i ddychwelyd true a bod y cludiant yn ailgysylltu unwaith y rhoddir caniatâd eto.

Os yw'r cais wedi'i ddiogelu yn dilyn y tiwnel beth bynnag, mae'r alwad ddiogelu mae'n debyg yn digwydd ar ôl i'r soced gael ei lwybro'n barod. Symudwch ef yn gynt ac ailbrofwch.

Cadwch y penderfyniad wedi'i ysgrifennu wrth ymyl gosodiad y cludiant: pa socedi sydd wedi'u diogelu, pa draffig ap sydd wedi'i eithrio, a beth mae'r ap yn ei wneud pan fydd diogelwch yn methu. Y llinell honno sy'n atal ailstrwythuro diweddarach rhag ehangu'r eithriad i'r ap cyfan oherwydd bod un prawf yn methu. Mae hefyd yn rhoi ffordd i'r person nesaf wirio'r bwriad heb wrthdroi peiriannu'r maniffest.

Erthyglau cysylltiedig