Skip to content

10ium/Telegram-Proxy-Checker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

اپلیکیشن اندروید ارزیاب و صحت‌سنجی پروکسی تلگرام

این پروژه یک اپلیکیشن بومی و کاربردی برای سیستم‌عامل اندروید است که با زبان کاتلین (Kotlin) توسعه یافته است. هدف اصلی این برنامه، استخراج هوشمند، پاک‌سازی و ارزیابی دقیق وضعیت سلامت پروکسی‌های تلگرام است.

این اپلیکیشن به طور کامل از دو پروتکل اصلی زیر پشتیبانی می‌کند: ۱. پروکسی‌های MTProto (شامل حالت‌های Obfuscated2، Padded-Intermediate و Fake TLS) ۲. پروکسی‌های SOCKS5 (با پشتیبانی از سیستم احراز هویت نام کاربری و رمز عبور)


الهام‌گرفته از پروژه مرجع (Inspiration)

بخش اعظمی از معماری بهینه، فرآیند پیش‌ارزیابی اتصال دو مرحله‌ای و منطق رمزگشایی سکرت‌ها در این اپلیکیشن، با الهام از پیاده‌سازی کارآمد و منعطف پروژه تحت وب Go توسعه یافته است:

پروژه مرجع در گیت‌هاب: https://github.com/rahgozar94725/MTProto-Checker


ویژگی‌های برجسته اپلیکیشن

  • استخراج هوشمند پروکسی: اسکن و جداسازی خودکار انواع لینک‌های پروکسی از میان متون شلوغ و پست‌های کانال‌ها.
  • تست دو مرحله‌ای سریع (برگرفته از نسخه Go):
    • مرحله اول (پیش‌ارزیابی TCP): بررسی سریع باز بودن پورت سرور با تایم‌اوت کوتاه جهت فیلتر کردن فوری پروکسی‌های غیرقابل دسترس.
    • مرحله دوم (دست‌افشانی کامل): ارسال درخواست رسمی اعتبارسنجی به هسته تلگرام و دریافت پاسخ تأیید فقط برای سرورهایی که پورت آن‌ها باز است.
  • تست بومی سوکت SOCKS5: پیاده‌سازی مستقل دست‌افشانی سوکت جهت جلوگیری از تداخل در پردازش همزمان پروکسی‌های دارای رمز عبور (بدون دستکاری سیستم احراز هویت سراسری JVM).
  • شبیه‌سازی دقیق ارتباط MTProto: پیاده‌سازی گام‌به‌گام فریم‌های Obfuscated2 و رمزنگاری AES-256-CTR به همراه اعمال صحیح دامنه (SNI) در Fake TLS.
  • طراحی بهینه بر پایه کوروتین‌ها: انتقال صحیح تمام بار محاسباتی سوکت‌ها به پس‌زمینه با استفاده از نخ‌های ورودی/خروجی.

ساختار فنی اپلیکیشن

اصلاح منطق رمزنگاری جریان (CTR) در MTProto

یکی از چالش‌های رایج در برنامه‌های تست پروکسی، قطع شدن اتصال از سمت سرور به دلیل رمزنگاری ناقص هدر اولیه است. از آنجا که الگوریتم رمزنگاری مورد استفاده از نوع جریانی (Stream Cipher) است، شروع رمزنگاری صرفاً از بایت‌های انتهایی، ترتیب فاز رمزنگار را به هم می‌ریزد. در این برنامه، کل هدر ۶۴ بایتی ابتدا پردازش شده و سپس بخش مربوط به پروتکل جایگزین می‌گردد تا وضعیت رمزنگار به درستی به گام‌های بعدی انتقال اطلاعات منتقل شود.

ایزوله‌سازی نشست‌های SOCKS5

در پلتفرم جاوا، استفاده از کلاس پیش‌فرض پروکسی سوکت باعث می‌شود که تمام تردها از یک بخش احراز هویت سراسری استفاده کنند. این موضوع در تست‌های همزمان منجر به خرابی اطلاعات و تداخل اعتبارنامه‌ها می‌شد. در این اپلیکیشن با پیاده‌سازی دستی هندشیک سوکت، اعتبارسنجی هر پروکسی کاملاً مستقل انجام می‌گیرد.


نیازمندی‌های بیلد پروژه

برای استفاده از بخش‌های همزمانی در سورس‌کد اپلیکیشن، وابستگی زیر در فایل تنظیمات گریدل ماژول برنامه قرار گرفته است:

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}")
}

سلب مسئولیت

این ابزار صرفاً جهت سنجش تأخیر شبکه، عیب‌یابی ارتباطات شخصی و اهداف آموزشی توسعه یافته است. استفاده از این ابزار باید مطابق با قوانین دسترسی شبکه و شرایط سرویس‌دهی ارائه‌دهندگان اینترنت باشد.

About

اپلیکیشن اندروید برای استخراج هوشمند و صحت‌سنجی پروکسی‌های تلگرام

Topics

Resources

Stars

10 stars

Watchers

0 watching

Forks

Contributors

Languages