iPhone VPN પર છે? iOS એપ ખરેખર શું જોઈ શકે છે
iOS SDK માં કોઈ એક VPN ફ્લેગ નથી. એપ ફક્ત પોતાની રૂપરેખા, સ્થિતિ સૂચના અને મર્યાદિત પ્રોક્સી સ્નેપશોટ જોઈ શકે છે, તેનાથી વધુ નહીં.
iOS એપને પૂછો કે ફોન VPN પર છે કે નહીં, અને પ્રામાણિક જવાબ એ છે કે તે તમે ધારો છો તે રીતે જાણી શકતી નથી. SDK «ઉપકરણ ટનલમાં છે» માટે કોઈ ફ્લેગ આપતું નથી, અને જે ખાનગી ઇન્ટરફેસ તેની નજીક જઈ શકે તે પ્રકાશિત થતી એપ માટે બંધ છે. તમે તમારી એપની પોતાની રૂપરેખા, તેની સાથે જોડાયેલી સ્થિતિ અને નેટવર્ક સ્ટેકમાંથી એક-બે પરોક્ષ સંકેત જોઈ શકો છો. દરેક અલગ પ્રશ્નનો જવાબ આપે છે, અને મોટાભાગની તૂટેલી તપાસ એમાંથી આવે છે કે તેમાંથી એકને આખો જવાબ માની લેવામાં આવે.
એક VPN ફ્લેગની દંતકથા
માન્યતા એ છે કે SDK માં ક્યાંક એવી પ્રોપર્ટી છે જે જણાવે છે કે ઉપકરણ ટનલમાં છે કે નહીં, જેમ રીચેબિલિટી ફ્લેગ જણાવે છે કે હોસ્ટ જવાબ આપે છે કે નહીં. એવી કોઈ જાહેર પ્રોપર્ટી નથી. જો હોય તો પણ, «ટનલ છે» અને «મારો ટ્રાફિક તેનો ઉપયોગ કરે છે» અલગ દાવા છે, અને મોટાભાગની એપ માટે ફક્ત બીજો જ મહત્વનો છે.
એ જ અંતર એ કારણ છે કે એક-લાઇન VPN ડિટેક્ટરની જાહેરાત કરતી લાઇબ્રેરીઓ સામાન્ય રીતે કંઈક નાજુક વાંચે છે, જેમ કે ઇન્ટરફેસનું નામ કે પ્રોક્સી કી, અને તેને ચુકાદા તરીકે રજૂ કરે છે.
nil પર ભરોસો કરતા પહેલાં પ્રેફરન્સ લોડ કરો
શેર કરેલ મેનેજર ઇન્સ્ટન્સ તમે માંગો કે તરત જ હોય છે, પણ તેની પ્રોટોકોલ પ્રોપર્ટી લોડ કૉલબૅક પૂરો થાય ત્યાં સુધી nil રહે છે. તેથી nil પ્રોટોકોલનો અર્થ «હજી લોડ થયું નથી» ઓછામાં ઓછું એટલો જ હોય છે જેટલો «ઇન્સ્ટોલ થયું નથી». વાંચન કમ્પ્લીશન બ્લોકની અંદર કરો, અને પછી જ નિર્ણય કરો: અસ્તિત્વમાં હોય તેવો પ્રોટોકોલ ઑબ્જેક્ટ, જેનો એનેબલ ફ્લેગ ચાલુ હોય, તે «ઇન્સ્ટોલ થયેલું» જેવું દેખાય છે.
બીજો સંકેત કનેક્શન ઑબ્જેક્ટ પર છે: અમાન્ય સ્થિતિ, જે સિસ્ટમ ત્યારે જણાવે છે જ્યારે આ એપમાં કોઈ રૂપરેખા ઇન્સ્ટોલ ન હોય. પૂર્ણ લોડ પછી અમાન્ય સ્થિતિ અને nil પ્રોટોકોલ સાથે મળીને સાચી ગેરહાજરી છે, સમયની રેસ નહીં.
કનેક્શન ફેરફારો સૂચના તરીકે આવે છે
load અને save ને આપેલા હેન્ડલર જણાવે છે કે રૂપરેખા સાથે શું થયું, ટનલ શું કરે છે તે નહીં. કનેક્ટ થતી વખતે તેમાંથી એક ફાયર થાય તેની રાહ જોવી એ એવી રેસ છે જે ક્યારેય પૂરી થતી નથી. તેના બદલે સ્થિતિ-બદલાવની સૂચના પર નજર રાખો, અને તે આવે ત્યારે કનેક્શન ઑબ્જેક્ટનું વર્તમાન મૂલ્ય વાંચો.
રૂપરેખા ઇન્સ્ટોલ થઈ જાય પછી કનેક્શન સ્થિતિ ટૂંકા ક્રમમાંથી પસાર થાય છે: ડિસ્કનેક્ટેડ, કનેક્ટિંગ, કનેક્ટેડ, રિઅસર્ટિંગ, ડિસ્કનેક્ટિંગ. «કનેક્ટેડ» ટનલનું વર્ણન કરે છે, તેની પાછળના સર્વરનું નહીં, તેથી તે ટ્રાફિક વહે છે તેનો પુરાવો નથી. On-demand એપ સસ્પેન્ડ હોય ત્યારે પણ ટનલ ઉપાડી શકે છે, અને પછી અપડેટ કરવા જેવું કંઈ હોય તે પહેલાં જ સૂચના આવી જાય છે.
મર્યાદિત પ્રોક્સી સ્નેપશોટ સંકેત છે, ચુકાદો નહીં
CFNetwork એપને સિસ્ટમની વર્તમાન પ્રોક્સી સેટિંગ્સ આપી શકે છે, અને તે પરિણામની અંદર ઇન્ટરફેસ નામ પર કી કરેલો મર્યાદિત શબ્દકોશ છે. tun, utun, ppp, ipsec કે tap થી શરૂ થતું નામ જોવું એ ટનલ હોવાનો સંકેત છે. તે આ એપ જે જોઈ શકે તેનો સ્નેપશોટ જ રહે છે, પેકેટ ક્યાં જાય છે તેનું નિવેદન નહીં.
પ્રદાતાઓ નામકરણ પર સહમત નથી, તેથી પ્રીફિક્સ ન હોવું કંઈ સાબિત કરતું નથી, અને હાજર ઇન્ટરફેસ કોઈ ટ્રાફિક વહન કર્યા વિના પણ હોઈ શકે. રીચેબિલિટી તેનાથી પણ નબળી છે: ખાનગી સરનામા પરની સફળ વિનંતી દર્શાવે છે કે તે ક્ષણે તે વિનંતી માટે માર્ગ કામ કરતો હતો, એ નહીં કે VPN ઇન્સ્ટોલ છે.
સિમ્યુલેટર Mac ઉધાર લે છે, અને બીજી એપ અદૃશ્ય રહે છે
સિમ્યુલેટર પાસે પોતાનો નેટવર્ક સ્ટેક નથી; તે જે પણ કનેક્શન કરે છે તે Mac નું છે. તેથી હોસ્ટ Mac પર ચાલતું VPN સિમ્યુલેટેડ એપ માટે પહેલેથી જ અમલમાં છે, અને સિમ્યુલેટરની પોતાની સેટિંગ્સ કંઈ દર્શાવતી નથી. સિમ્યુલેટર શરૂ થયા પછી ટનલ ઉપર આવી હોય તો એપ ડિબગ કરવા કરતાં તેને ફરી શરૂ કરવું સામાન્ય રીતે ઝડપી છે. બિન-માનક પોર્ટ પરનું હોસ્ટ તે પોર્ટ URL માં જરૂરી છે, અથવા socat TCP-LISTEN:12345,fork TCP:host:12345 જેવું સ્થાનિક ફોરવર્ડિંગ જરૂરી છે.
જાહેર API બીજી એપ કે રૂપરેખા પ્રોફાઇલના VPN પ્રોફાઇલની યાદી આપશે નહીં. એક જાણીતી એપ માટે canOpenURL દ્વારા URL સ્કીમ પ્રોબ એ ચલાવી શકાય તેવી યુક્તિ છે, અને iOS 9 થી પૂછાયેલી સ્કીમ તમારા Info.plist માં જાહેર કરવી પડે છે; તેને છોડી દો તો કૉલ false પરત કરે છે. OpenVPN Connect openvpn:// પર પ્રતિસાદ આપે છે, જે તેને સારું ઉદાહરણ અને ખરાબ સામાન્ય ડિટેક્ટર બનાવે છે.
ત્રણ અવલોકનો ભેગા કરો અને કહો કે તેનો અર્થ શું છે
વ્યવહારમાં ત્રણ પરિણામો એકઠાં કરો: લોડ થયેલી અને સક્ષમ રૂપરેખા, અમાન્ય ન હોય તેવી કનેક્શન સ્થિતિ, અને ફક્ત ટનલ દ્વારા પહોંચી શકાય તેવા સરનામે વિનંતી. દરેક એકલું ભ્રમિત કરે છે; ભેગાં મળીને એ કહે છે કે એપ શું જાણી શકે છે, વપરાશકર્તા શું ધારે છે તે નહીં.
પરિણામને તમારા ડાયગ્નોસ્ટિક્સમાં એક boolean તરીકે નહીં, ત્રણ લીટી તરીકે લખો. જ્યારે વપરાશકર્તા કહે કે VPN બંધ છે અને તમારી એપ સહમત ન હોય, ત્યારે ત્રણ લીટીઓ દર્શાવે છે કે કયું અવલોકન અલગ પડ્યું, અને એ જ તફાવત છે સપોર્ટ ટિકિટ વચ્ચે જેના પર તમે કાર્ય કરી શકો અને એવી જે «મારે ત્યાં કામ કરે છે» સાથે પૂરી થાય.