چگونه وضعیت VPN و پروکسی را برای یک برنامه کاری مدیریتشده بخوانیم
یک نماد VPN روی گوشی مدیریتشده چیز بسیار کمی را ثابت میکند. شبکه فعال، قابلیتهای آن و پروکسی مؤثر را بخوانید و سپس هر مقدار تهی را همانگونه که هست بخوانید.
یک برنامه کاری روی گوشی مدیریتشده شکست میخورد، کسی کلید VPN را نگاه میکند، آن را روشن میبیند و مسیر را سالم اعلام میکند۔ اینجاست که بیشتر این تشخیصها متوقف میشوند، و این خیلی زود است: یک انتقال VPN فعال نمیگوید که درخواستهای این برنامه از آن استفاده کردهاند، و پروکسیای که واقعاً اعمال میشود میتواند برای هر برنامه باشد یا با یک فایل PAC انتخاب شود، نه اینکه در تنظیمات نمایش داده شود۔ از همان برنامه و پروفایلی که در حال اشکالزدایی آن هستید شروع کنید، سپس دیدگاه خود پلتفرم به مسیر را بخوانید۔
از برنامه و پروفایل آن شروع کنید
یک برنامه با نشان کاری معمولاً در پروفایلی جداگانه با سیاست شبکه خودش اجرا میشود۔ مرورگر شخصی روی همان گوشی برای آن شاهد نیست، و نتیجهای از دستگاه همکار با مدیریت متفاوت هم شاهد نیست۔ قبل از خواندن هر چیزی، توجه کنید که برنامه به کدام پروفایل تعلق دارد۔
در تنظیمات، ورودیهای VPN پیکربندیشده را فهرست کنید و توجه کنید که هرکدام متعلق به کیست۔ در نسخههای سامسونگ، برچسبهای منو بین نسخهها جابهجا میشوند، پس خود ورودی را توصیف کنید، نه مسیر رسیدن به آن را۔ ورودی خاکستری یا مدیریتشده متعلق به کسی است که دستگاه را اداره میکند؛ خاموش کردن آن بهعنوان آزمایش، چیزی را که میخواهید اندازه بگیرید تغییر میدهد و ممکن است خلاف سیاست باشد۔
وضعیتی را بخوانید که پلتفرم گزارش میکند
درون یک فعالیت موجود در ابزارهای پشتیبانی شما، در API 23 یا بالاتر، وضعیت شبکه بدون فرستادن حتی یک بایت خوانده میشود۔ این فراخوانی به مجوز مانیفست معمول ACCESS_NETWORK_STATE برای خواندن قابلیتها نیاز دارد۔
val cm = getSystemService(android.net.ConnectivityManager::class.java) ?: return
val network = cm.activeNetwork
val caps = network?.let { cm.getNetworkCapabilities(it) }
val hasVpn = caps?.hasTransport(android.net.NetworkCapabilities.TRANSPORT_VPN)
val proxy = cm.defaultProxyهر مقدار به پرسشی باریک پاسخ میدهد۔ شبکه فعال، شبکه پیشفرض برای فرایند فراخواننده در همان لحظه است۔ بررسی قابلیت به شما میگوید که آن شبکه پیشفرض پشتیبان VPN دارد یا نه۔ فراخوانی پروکسی، پروکسی HTTP پیشفرض مؤثر را گزارش میکند، و شیء بازگشتی ممکن است یک پروکسی ایستا یا یک اسکریپت PAC را توصیف کند۔
اگر به نمای هر شبکه بهجای نمای پیشفرض نیاز دارید، ویژگیهای پیوند همان شبکه را بخوانید و با cm.getLinkProperties(network)?.httpProxy مقایسه کنید۔ پروکسیای که مدیریت دستگاه نصب کرده است در فراخوانی پروکسی پیشفرض دیده میشود و در ویژگیهای پیوند دیده نمیشود، و این راهی سریع است برای جدا کردن پروکسیای که سیاست داده از پروکسیای که شبکه داده است۔
خروجی را در کانال پشتیبانی خود نگه دارید، نه در یک گزارش عمومی۔ نامهای میزبان پروکسی، نشانیهای PAC و پسوندهای داخلی نشان میدهند که سازمان شما ترافیک را چگونه مسیریابی میکند، و هیچیک از آنها برای توصیف خرابی لازم نیست۔
هر میدان را باریک تفسیر کنید
شبکه تهی یا شیء قابلیت تهی یعنی وضعیت شبکه فراخواننده در دسترس نبوده یا در طول خواندن تغییر کرده است۔ این به معنای نبودن VPN نیست۔ آن را ناشناخته بگیرید و پس از آمدن برنامه به پیشزمینه دوباره بخوانید، نه بهعنوان نتیجه منفی۔
انتقال VPN ضعیفترین نشانه مثبت است۔ هر برنامهای که VpnService را نگه دارد یکی تولید میکند، از جمله یک برنامه فیلتر محلی که هرگز ترافیک شما را جایی نمیفرستد۔ پس مقدار true میگوید یک شبکه پیشفرض با پشتیبان VPN وجود دارد، نه اینکه خروجی سازمان شما استفاده شده و قطعاً نه اینکه بازرسی رخ داده است۔
پروکسی پیشفرض تهی یعنی این API هیچ پروکسی HTTP پیشفرضی برای پیکربندی مؤثر گزارش نمیکند۔ چیز بسیار کمی را رد میکند: یک برنامه میتواند تنظیم SOCKS خودش را داشته باشد، کلاینت HTTP خودش را پیاده کند، یا توسط پروکسیای در درگاه هدایت شود که دستگاه هرگز از آن باخبر نمیشود۔
PAC همان حالتی است که پاسخ تکمقداری را شکست میدهد۔ یک اسکریپت میتواند یک مقصد را از پروکسی بفرستد و دیگری را مستقیم، پس دو درخواست از یک برنامه در فاصله یک ثانیه ممکن است مسیرهای متفاوت بگیرند۔ و برنامهای که سوکتهایش را به شبکهای انتخابشده میبندد، یا bindProcessToNetwork را فراخوانی میکند، هیچ الزامی به پیروی از پیشفرض ندارد۔
آنچه این تصویر لحظهای نمیتواند به شما بگوید
این یک تاریخچه نیست۔ هیچچیز اینجا ثبت نمیکند که درخواست شکستخورده کدام مسیر را رفته است، و خواندن موفق پس از شکست شاهدی درباره شکست نیست۔ فهرست موجودی هم نیست: شما شبکه پیشفرض فرایند فراخواننده را میگیرید، نه فهرست اتصالهای خصوصی هر برنامه۔
درباره آنچه بالای سوکت رخ میدهد هم چیزی نمیگوید۔ دستدادن TLS که روی دستگاه مدیریتشده شکست میخورد ممکن است مشکل مخزن اعتماد، ناسازگاری پینکردن یا نامی باشد که پروکسی رد میکند، و هیچیک از آنها در خواندن اتصال ظاهر نمیشود۔
به همین دلیل دو نیمه با هم اهمیت دارند: تصویر لحظهای باریک میکند که کجا را ببینید، و تشخیصهای خود برنامه میگویند که واقعاً چه شکست خورد۔
آن را در قالبی گزارش کنید که مدیر بتواند استفاده کند
برنامه آسیبدیده، پروفایل، زمان و مرحله دقیقی که شکست خورد را بدهید: تحلیل نام، اتصال TCP، دستدادن TLS یا یک وضعیت HTTP۔ مقادیر تصویر لحظهای را همانگونه که خوانده شدند اضافه کنید، با تهیها که بهصورت تهی نوشته میشوند نه بهصورت هیچ۔ توجه کنید که آیا برنامههای دیگر در همان پروفایل هم به همین شکل شکست میخورند، که مشکل برنامه را از مشکل مسیر در کل پروفایل جدا میکند۔
سپس متوقف شوید و بگذارید صاحب مسیر پاسخ دهد۔ گواهی شرکتی، نشانی پروکسی یا ورودی VPN را اجازه حذف مدیریت یا دور زدن مسیر تأییدشده نگیرید؛ این یک پرونده پشتیبانی را به حادثه سیاستی تبدیل میکند۔
قرارداد پروکسی پیشفرض کوتاه است و ارزش یک بار خواندن را دارد، چون دقیقاً تعیین میکند که این فراخوانی کدام پروکسی را گزارش میکند، و هر خواندن بیشازحد این تصویر لحظهای با این فرض شروع میشود که بیشتر گزارش میکند۔