VpnService protect() કે એપ બાકાત: રાઉટિંગ કઈ રીતે સુધરે છે
ટનલ વહન કરતું સોકેટ સુરક્ષિત કરો અથવા આખી એપ બાકાત રાખો: તમારા Android VPNને કેટલી વ્યાપ્તિ જોઈએ તે નક્કી કરતી ત્રણ શરતો.
ટનલના પોતાના પેકેટ ટનલની બહાર રાખવાની બે રીતો છે: ટ્રાન્સપોર્ટ સોકેટ સુરક્ષિત કરો, અથવા આખી એપ VPNમાંથી બહાર કાઢો. તે બંને જુદી જુદી સમસ્યાઓ ઉકેલે છે, અને જોડવું સહેલું હોવાથી મોટી વ્યાપ્તિ પસંદ કરવી એ જ રીતે એપ્લિકેશનો ધ્યાનમાં ન લેતાં સ્થાનિક નેટવર્ક ઍક્સેસ અને વિભાજિત DNS ગુમાવે છે. જે ટનલની બહાર રહેવું જોઈએ તેનાથી શરૂ કરો, પછી તે પ્રાપ્ત કરતી સૌથી નાની વ્યાપ્તિ પસંદ કરો.
protect() ટનલમાંથી શું દૂર કરે છે
VpnService.protect() એ પ્રતિ-સોકેટ કૉલ છે. ટનલ વહન કરતું સોકેટ અથવા ડિસ્ક્રિપ્ટર તમે તેને આપો છો, અને Android તે સોકેટને ચિહ્નિત કરે છે જેથી તેનું ટ્રાફિક VPN ઇન્ટરફેસને બદલે નીચેના નેટવર્કનો ઉપયોગ કરે. એપ જે બાકી બધું મોકલે છે તે સામાન્ય VPN માર્ગને અનુસરે છે.
એ જ સાંકડી વ્યાપ્તિ એ મુદ્દો છે. સુરક્ષિત સોકેટ તમારો HTTP ક્લાયન્ટ નામ કેવી રીતે ઉકેલે છે, તમારા એનાલિટિક્સ કૉલ કયું ઇન્ટરફેસ વાપરે છે, અથવા પછીથી ખૂલતા બીજા જોડાણનું શું થાય છે તે બદલતું નથી.
વ્યાપ્તિ નક્કી કરતી ત્રણ શરતો
પ્રથમ શરત એ છે કે ફક્ત ટનલ ટ્રાન્સપોર્ટને બહાર નીકળવું છે કે નહીં. જો એપનું બાકીનું ટ્રાફિક હજી VPNમાંથી જવું જોઈએ, તો સોકેટ સુરક્ષા યોગ્ય વ્યાપ્તિ છે. બીજી શરત એ છે કે સોકેટ બનાવવાનું નિયંત્રણ તમારી પાસે છે કે નહીં. અંદર ઊંડે પોતાનું સોકેટ ખોલતી લાઇબ્રેરી તમનેprotect() કૉલ કરવાની જગ્યા આપતી નથી, સિવાય કે તે હૂક આપે અથવા પહેલેથી બનેલું સોકેટ સ્વીકારે. ત્રીજી શરત એ છે કે એપને સીધું સ્થાનિક નેટવર્ક કે captive portal સુધી પહોંચવું છે કે નહીં, જે ટનલ જીવંત રાખવા કરતાં જુદી જરૂરિયાત છે.
એપનેaddDisallowedApplication() સાથે બાકાત કરવી એ બેઠી રીત છે. તે એપ જે પણ જોડાણ કરે છે તે બધું VPNમાંથી દૂર કરે છે, જે તમે તપાસવા માંગતા હતા તે પણ, અને કેટલાક ઉપકરણોમાં સ્થાનિક શોધની વર્તણૂક પણ બદલે છે.
ત્રીજો વિકલ્પ છે ટ્રાન્સપોર્ટને પસંદ કરેલા નેટવર્ક સાથે બાંધવો:bindProcessToNetwork() અથવા સોકેટ-સ્તરીય નેટવર્ક હેન્ડલ વડે. જ્યારે ઉપકરણમાં એકસાથે Wi-Fi અને મોબાઇલ હોય અને તમે ઇચ્છો કે ટનલ ચોક્કસ અપલિંક પર જાય ત્યારે આ ઉપયોગી છે.
ટ્રાન્સપોર્ટ બનતો હોય ત્યારે જ તેને કૉલ કરો
કૉલ કરોprotect() ટ્રાન્સપોર્ટ બનાવતા એ જ બ્લોકમાં,connect() અથવાsend() પહેલાં. જો કૉલ false પાછો આપે, તો સોકેટ બંધ કરો અને સેટઅપ નિષ્ફળ કરો; ચાલુ રાખવાથી તમારી પાસે એવું ટ્રાન્સપોર્ટ રહે છે જેના પેકેટ તમારા પોતાના ઇન્ટરફેસમાં ફરી પ્રવેશી શકે છે.
આકાર એક જ જગ્યાએ રાખવા પૂરતો નાનો છે:
DatagramSocket transport = new DatagramSocket();
if (!protect(transport)) {
transport.close();
throw new IOException("transport not protected");
}
transport.connect(serverAddress);અહીં ત્રણ વિગતો ડંખે છે. પ્રથમ,બુલિયન એ જ એકમાત્ર સંકેત છે જે તમને મળે છે, તેથી નિષ્ફળતાને પૂરતા સંદર્ભ સાથે લોગ કરો જેથી પાછી ખેંચાયેલી સંમતિ અને નકારાયેલા કૉલ વચ્ચે ભેદ પડે. બીજું,protect() સોકેટને આવરી લે છે, ડિસ્ક્રિપ્ટર નંબરને નહીં: જો તમે સોકેટ બંધ કરો અને પછીથી એ જ પૂર્ણાંક બીજા સોકેટ માટે વાપરો, તો નવું સોકેટ સુરક્ષિત નથી. ત્રીજું, જ્યારે નેટિવ લાઇબ્રેરી ટ્રાન્સપોર્ટ ખોલે, ત્યારે નેટિવ કોડ જોડાય તે પહેલાં ડિસ્ક્રિપ્ટર સુરક્ષિત કરો, નહીં તો માર્ગ પહેલેથી પસંદ થઈ ગયો હોઈ શકે.VpnService સંદર્ભ એ તપાસવાની જગ્યા છે કે તમારું લક્ષ્ય API સ્તર ખરેખર કયા ઓવરલોડ આપે છે.
ફક્ત સુખદ માર્ગ નહીં, અવરોધિત માર્ગ પણ ચકાસો
ટનલ ચાલુ રાખીને ચકાસો, કારણ કે એ જ એકમાત્ર સ્થિતિ છે જ્યાં બંને માર્ગ અલગ પડી શકે. સુરક્ષિત ટ્રાન્સપોર્ટ દ્વારા એક વિનંતી મોકલો અનેprotect() ક્યારેય કૉલ ન કર્યો હોય તેવા કોડ માર્ગમાંથી બીજી, પછી દૂરનો છેડો શું જુએ છે તે સરખાવો: સુરક્ષિત જોડાણ નીચેના નેટવર્કને સ્રોત તરીકે લઈને આવવું જોઈએ, જ્યારે અસુરક્ષિત જોડાણ ટનલનું પોતાનું સરનામું બતાવે છે અને ટનલના બાઇટ કાઉન્ટર ખસેડે છે. ઉપકરણ પર ss અથવાnetstat રેડિયોમાંથી કંઈ નીકળે તે પહેલાં એ જ વિભાજન બતાવે છે.
રદ કરવાની ક્રિયા અલગથી ચકાસો, કારણ કે સંમતિમાં ફેરફાર તમારા સોકેટ કોડને સ્પર્શ્યા વિના ઇન્ટરફેસ તોડી નાખે છે. VPN સંમતિ રદ કરો અથવા સેવા બંધ કરો, ટ્રાન્સપોર્ટ ફરી બનાવો અને ખાતરી કરો કેprotect() હજી પણ true પાછો આપે છે અને સંમતિ ફરી મળતાં જ ટ્રાન્સપોર્ટ ફરી જોડાય છે.
જો સુરક્ષિત વિનંતી તો પણ ટનલને અનુસરે, તો સુરક્ષા કૉલ સંભવતઃ સોકેટ રાઉટ થઈ ગયા પછી થાય છે. તેને વહેલા ખસેડો અને ફરી ચકાસો.
નિર્ણયને ટ્રાન્સપોર્ટ સેટઅપની બાજુમાં લખેલો રાખો: કયા સોકેટ સુરક્ષિત છે, કયો એપ ટ્રાફિક બાકાત છે, અને સુરક્ષા નિષ્ફળ થાય ત્યારે એપ શું કરે છે. એ જ લીટી પછીના રિફેક્ટરને એક પરીક્ષણ નિષ્ફળ ગયું હોવાથી બાકાતને આખી એપ સુધી લંબાવતું અટકાવે છે. તે આગલી વ્યક્તિને મેનિફેસ્ટ ઉલટાવીને તપાસ્યા વિના ઇરાદો ચકાસવાનો રસ્તો પણ આપે છે.