کسی 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 بند ہے اور آپ کی ایپ متفق نہ ہو، تو وہ تین سطریں دکھاتی ہیں کہ کون سا مشاہدہ ہٹا، اور یہی فرق ہے اس سپورٹ ٹکٹ میں جس پر آپ کارروائی کر سکتے ہیں اور اس میں جو «میرے ہاں چلتا ہے» پر ختم ہوتا ہے۔

متعلقہ مضامین