این پروژه یک اپلیکیشن بومی و کاربردی برای سیستمعامل اندروید است که با زبان کاتلین (Kotlin) توسعه یافته است. هدف اصلی این برنامه، استخراج هوشمند، پاکسازی و ارزیابی دقیق وضعیت سلامت پروکسیهای تلگرام است.
این اپلیکیشن به طور کامل از دو پروتکل اصلی زیر پشتیبانی میکند: ۱. پروکسیهای MTProto (شامل حالتهای Obfuscated2، Padded-Intermediate و Fake TLS) ۲. پروکسیهای SOCKS5 (با پشتیبانی از سیستم احراز هویت نام کاربری و رمز عبور)
بخش اعظمی از معماری بهینه، فرآیند پیشارزیابی اتصال دو مرحلهای و منطق رمزگشایی سکرتها در این اپلیکیشن، با الهام از پیادهسازی کارآمد و منعطف پروژه تحت وب Go توسعه یافته است:
پروژه مرجع در گیتهاب: https://github.com/rahgozar94725/MTProto-Checker
- استخراج هوشمند پروکسی: اسکن و جداسازی خودکار انواع لینکهای پروکسی از میان متون شلوغ و پستهای کانالها.
- تست دو مرحلهای سریع (برگرفته از نسخه Go):
- مرحله اول (پیشارزیابی TCP): بررسی سریع باز بودن پورت سرور با تایماوت کوتاه جهت فیلتر کردن فوری پروکسیهای غیرقابل دسترس.
- مرحله دوم (دستافشانی کامل): ارسال درخواست رسمی اعتبارسنجی به هسته تلگرام و دریافت پاسخ تأیید فقط برای سرورهایی که پورت آنها باز است.
- تست بومی سوکت SOCKS5: پیادهسازی مستقل دستافشانی سوکت جهت جلوگیری از تداخل در پردازش همزمان پروکسیهای دارای رمز عبور (بدون دستکاری سیستم احراز هویت سراسری JVM).
- شبیهسازی دقیق ارتباط MTProto: پیادهسازی گامبهگام فریمهای Obfuscated2 و رمزنگاری AES-256-CTR به همراه اعمال صحیح دامنه (SNI) در Fake TLS.
- طراحی بهینه بر پایه کوروتینها: انتقال صحیح تمام بار محاسباتی سوکتها به پسزمینه با استفاده از نخهای ورودی/خروجی.
یکی از چالشهای رایج در برنامههای تست پروکسی، قطع شدن اتصال از سمت سرور به دلیل رمزنگاری ناقص هدر اولیه است. از آنجا که الگوریتم رمزنگاری مورد استفاده از نوع جریانی (Stream Cipher) است، شروع رمزنگاری صرفاً از بایتهای انتهایی، ترتیب فاز رمزنگار را به هم میریزد. در این برنامه، کل هدر ۶۴ بایتی ابتدا پردازش شده و سپس بخش مربوط به پروتکل جایگزین میگردد تا وضعیت رمزنگار به درستی به گامهای بعدی انتقال اطلاعات منتقل شود.
در پلتفرم جاوا، استفاده از کلاس پیشفرض پروکسی سوکت باعث میشود که تمام تردها از یک بخش احراز هویت سراسری استفاده کنند. این موضوع در تستهای همزمان منجر به خرابی اطلاعات و تداخل اعتبارنامهها میشد. در این اپلیکیشن با پیادهسازی دستی هندشیک سوکت، اعتبارسنجی هر پروکسی کاملاً مستقل انجام میگیرد.
برای استفاده از بخشهای همزمانی در سورسکد اپلیکیشن، وابستگی زیر در فایل تنظیمات گریدل ماژول برنامه قرار گرفته است:
dependencies {
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0"
}همچنین دسترسی زیر جهت برقراری ارتباط در فایل مانیفست برنامه تعریف شده است:
<uses-permission android:name="android.permission.INTERNET" />شما میتوانید متون دریافت شده از منابع مختلف را مستقیماً به متد استخراج ارسال کنید:
val rawText = "tg://proxy?server=198.51.100.12&port=443&secret=ee00000000000000000000000000000000676f6f676c652e636f6d"
val extractedList = ProxyChecker.extractProxiesFromText(rawText)کد زیر نحوه فراخوانی تست بر روی یک نمونه پروکسی را نشان میدهد:
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
suspend fun verifyProxy(item: ProxyItem) {
val result = ProxyChecker.checkSingleProxy(item, timeoutMs = 5000)
if (result.status == "Working") {
println("پروکسی فعال است. پینگ: ${result.ping} میلیثانیه")
} else {
println("اتصال ناموفق بود")
}
}برای اجرای تستها به صورت همزمان بدون افت فریم در رابط کاربری اپلیکیشن:
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.coroutineScope
suspend fun runBatchTest(proxies: List<ProxyItem>) = coroutineScope {
val jobs = proxies.map { proxy ->
async {
ProxyChecker.checkSingleProxy(proxy, timeoutMs = 5000)
}
}
val results = jobs.awaitAll()
val workingProxies = results.filter { it.status == "Working" }
println("تعداد پروکسیهای فعال یافتشده: ${workingProxies.size}")
}این ابزار صرفاً جهت سنجش تأخیر شبکه، عیبیابی ارتباطات شخصی و اهداف آموزشی توسعه یافته است. استفاده از این ابزار باید مطابق با قوانین دسترسی شبکه و شرایط سرویسدهی ارائهدهندگان اینترنت باشد.