Thanks to visit codestin.com
Credit goes to github.com

Skip to content

FLAT447/DnsBenchmark

Repository files navigation

DNS Benchmark

Легковесное, быстрое и приватное Android-приложение для массового тестирования (бенчмарка) DNS-серверов. Оно позволяет в реальном времени проверять сотни IP-адресов на скорость отклика (Latency) и стабильность (Stability), фильтровать результаты и экспортировать рабочие конфигурации.

Особенно полезно для сетевых энтузиастов, авторов списков обхода блокировок и разработчиков индивидуальных VPN/прокси-решений.

✨ Ключевые фичи

  • Массовый параллельный тест: Благодаря Kotlin Coroutines и встроенному семафору приложение может одновременно пинговать до 100 серверов без просадки производительности UI.
  • Умный парсинг IP: Не нужно заботиться о формате входного файла — встроенный Regex-парсер сам вытащит валидные IPv4-адреса из любого текстового хаоса.
  • Кастомные DNS-запросы: Вместо обычного системного ICMP-пинга приложение отправляет реальный низкоуровневый UDP-пакет (DNS Query для домена google.com) на 53 порт тестируемого сервера, что гарантирует проверку именно работоспособности DNS-службы.
  • Гибкий экспорт: Возможность сохранения отфильтрованных результатов в трёх форматах: TXT (чистый список IP), CSV (таблица для анализа) или Markdown (готовая таблица для GitHub-репозиториев).
  • Продвинутая фильтрация и сортировка: Сортировка по минимальной задержке или по максимальной стабильности (процент успешных ответов). Фильтрация по количеству успешных пакетов.
  • Современный UI: Полностью на Jetpack Compose с поддержкой темной/светлой темы и динамического системного оформления.

🚀 Как это работает (Под капотом)

  1. Многопоточность: Тестирование реализовано через асинхронные задачи async(Dispatchers.IO). Количество одновременно выполняемых потоков контролируется через kotlinx.coroutines.sync.Semaphore.
  2. Валидация пакетов: Чтобы избежать путаницы при асинхронной обработке ответов на одном сокете, для каждого запроса генерируется случайный Transaction ID (2 байта). Ответ засчитывается только в том случае, если ID в байтовом массиве совпал с отправленным.
  3. Безопасный таймаут: Реализован динамический пересчет оставшегося времени (timeoutMs - elapsed), защищающий приложение от зависания сокета при потере пакетов.

🛠️ Настройки тестирования

В приложении доступно диалоговое окно конфигурации, где можно тонко настроить процесс бенчмарка:

Параметр Диапазон значений Описание
Пакетов на IP 1 – 10 пингов Сколько запросов отправить на каждый сервер для проверки стабильности.
Таймаут ответа 100 – 2000 мс Максимальное время ожидания ответа от сервера.
Параллельные запросы 5 – 100 потоков Максимальное количество одновременно опрашиваемых IP (размер семафора).
Задержка между пингами 0 – 500 мс Пауза перед отправкой следующего пакета на один и тот же IP (снижает риск блокировки).

📖 Инструкция по использованию

  1. Ввод данных: Скопируйте и вставьте список IP-адресов в текстовое поле ИЛИ нажмите кнопку «Импорт списка из файла» для загрузки своего .txt/.csv.
  2. Запуск: Нажмите «Запустить тест» (на старых версиях Android приложение запросит разрешение на запись в память для сохранения результатов, на Android 11+ запись идет напрямую в папку Downloads).
  3. Анализ: На экране результатов вы можете отсортировать сервера (например, вытащить самые стабильные наверх) или отфильтровать откровенный «мусор».
  4. Копирование/Экспорт: * Кнопка «Копировать» отправит текущий отфильтрованный список IP в буфер обмена.
    • Приложение автоматически сохраняет результаты в папку загрузок устройства в выбранном в настройках формате (working_dns.txt, working_dns.csv или working_dns.md).

💻 Стек технологий

  • Язык: Kotlin
  • UI-фреймворк: Jetpack Compose (Material 3)
  • Асинхронность: Kotlin Coroutines & Flows
  • Архитектурные компоненты: SharedPreferences для хранения пресетов настроек, ContentResolver для безопасного чтения файлов через Android SAF.
  • Сеть: Low-level java.net.DatagramSocket и DatagramPacket.

About

Android приложение для теста DNS-резолверов

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages