Kana da hanyoyi biyu na ajiye fakiti na tunnel ɗin kansa a wajen tunnel ɗin: kare soket ɗin jigila, ko fitar da dukan app ɗin daga VPN. Suna warware matsaloli daban-daban, kuma zaɓin mafi faɗi saboda ya fi sauƙin haɗawa shi ne hanyar da apps ke rasa damar shiga cibiyar sadarwa ta gida da DNS raba ba tare da lura ba. Fara daga abin da ya kamata ya kasance a wajen tunnel ɗin, sannan zaɓi mafi ƙarancin matakin da zai cim ma hakan.

Abin da protect() ke cirewa daga tunnel ɗin

VpnService.protect() kira ne na kowane soket. Kana ba shi soket ɗin ko bayanin da ke ɗauke da tunnel ɗin, kuma Android yana yi wa wannan soket ɗin alama don zirga-zirgarsa ta yi amfani da cibiyar sadarwar da ke ƙasa maimakon fuskar VPN. Duk sauran abin da app ɗin ke aikawa yana bin hanyar VPN ta yau da kullum.

Wannan ɗan ƙaramin mataki shi ne manufar. Soket ɗin da aka kare ba ya canza yadda abokin ciniki na HTTP ɗinka ke warware sunaye, wace fuska kiran bincikenka ke amfani da ita, ko abin da zai faru da haɗi na biyu da aka buɗe daga baya.

Sharuɗɗa uku da ke ƙayyade matakin

Sharaɗi na farko shi ne ko jigilar tunnel ɗin kaɗai za ta fita. Idan sauran zirga-zirgar app ɗin ya kamata su ci gaba da wucewa ta VPN, kare soket ɗin shi ne matakin da ya dace. Sharaɗi na biyu shi ne ko kana sarrafa ƙirƙirar soket ɗin. Ɗakin karatu da ke buɗe nata soket ɗin a zurfi ba ya ba ka wurin yin kira ga protect(), sai idan ya bayyana hook ko ya karɓi soket ɗin da aka riga aka gina. Sharaɗi na uku shi ne ko app ɗin dole ya isa cibiyar sadarwa ta gida ko captive portal kai tsaye, wanda wata buƙata ce dabam da ajiye tunnel ɗin a raye.

Cire app ɗin da addDisallowedApplication() kayan aiki ne marar tausayi. Yana cire kowace haɗi da app ɗin ya yi daga VPN, har da waɗanda kake so ka duba, kuma a wasu na'urori yana canza yadda binciken gida ke kasancewa.

Zaɓi na uku shi ne ɗaure jigilar ga wata cibiyar sadarwar da aka zaɓa da bindProcessToNetwork() ko riƙon cibiyar sadarwa a matakin soket. Wannan yana da amfani sa'ad da na'urar take da Wi-Fi da wayar hannu a lokaci ɗaya kuma kana son tunnel ɗin ya bi wata hanyar hawa ta musamman.

Kira shi yayin da ake ƙirƙirar jigilar

Kira protect() a cikin wannan block ɗin da ke ƙirƙirar jigilar, kafin connect() ko send(). Idan kiran ya dawo false, rufe soket ɗin kuma ka sa saitin ya kasa; ci gaba yana barin ka da jigila wadda fakitan ta na iya sake shiga cikin naka fuska.

Siffar tana da ƙanƙanta da za a ajiye ta a wuri ɗaya:

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

Abubuwa uku suna ciji a nan. Na farko,boolean shi ne kawai alamar da kake samu, don haka rubuta gazawar da isasshen mahallin da zai bambanta yarda da aka janye daga kiran da aka ƙi. Na biyu,protect() yana rufe soket ɗin, ba lambar bayanin ba: idan ka rufe soket ɗin kuma daga baya ka sake amfani da wannan cikakkiyar lamba don wani soket, sabon soket ɗin ba a kare shi ba. Na uku, sa'ad da ɗakin karatu na asali ya buɗe jigilar, kare bayanin kafin lambar asali ta haɗa, in ba haka ba ana iya zaɓar hanyar tuni.Bayanin VpnService shi ne wurin da za ka tabbatar da waɗanne nau'ikan kira matakin API ɗinka na manufa ke bayarwa a gaske.

Gwada hanyar da aka toshe, ba kawai hanyar farin ciki ba

Tabbatar da tunnel ɗin a buɗe, domin shi ne kawai yanayin da hanyoyin biyu za su iya bambanta. Aika buƙata ɗaya ta jigilar da aka kare, ɗaya kuma daga hanyar lamba da ba ta taɓa yin protect() ba, sannan kwatanta abin da ƙarshen nesa ke gani: haɗin da aka kare ya kamata ya iso da cibiyar sadarwar ƙasa a matsayin tushe, yayin da wanda ba a kare ba yana nuna adireshin tunnel ɗin kansa kuma yana motsa ma'aunin byte ɗin tunnel ɗin. A na'urar,ss ko netstat yana nuna wannan rabuwa kafin wani abu ya bar rediyo.

Gwada janyewa daban, domin canjin yarda yana rushe fuskar ba tare da taɓa lambar soket ɗinka ba. Janye yardar VPN ko dakatar da sabis ɗin, sake gina jigilar, kuma tabbatar da cewa protect() har yanzu yana mayar da true kuma jigilar tana sake haɗawa da zarar an sake ba da yarda.

Idan buƙatar da aka kare tana bin tunnel ɗin duk da haka, kiran kariya yana faruwa ne bayan an riga an yi wa soket ɗin hanya. Motsa shi da wuri ka sake gwadawa.

Ajiye shawarar a rubuce kusa da saitin jigilar: waɗanne soket aka kare, wane zirga-zirgar app aka cire, da abin da app ɗin ke yi idan kariya ta kasa. Wannan layin ne ke hana wani sake tsari daga baya faɗaɗa cirewar zuwa dukan app saboda gwaji ɗaya yana kasawa. Yana kuma ba wa na gaba hanyar duba manufar ba tare da juya manifest ba.

Labarai masu alaƙa