Легковесное, быстрое и приватное 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 с поддержкой темной/светлой темы и динамического системного оформления.
- Многопоточность: Тестирование реализовано через асинхронные задачи
async(Dispatchers.IO). Количество одновременно выполняемых потоков контролируется черезkotlinx.coroutines.sync.Semaphore. - Валидация пакетов: Чтобы избежать путаницы при асинхронной обработке ответов на одном сокете, для каждого запроса генерируется случайный
Transaction ID(2 байта). Ответ засчитывается только в том случае, если ID в байтовом массиве совпал с отправленным. - Безопасный таймаут: Реализован динамический пересчет оставшегося времени (
timeoutMs - elapsed), защищающий приложение от зависания сокета при потере пакетов.
В приложении доступно диалоговое окно конфигурации, где можно тонко настроить процесс бенчмарка:
| Параметр | Диапазон значений | Описание |
|---|---|---|
| Пакетов на IP | 1 – 10 пингов | Сколько запросов отправить на каждый сервер для проверки стабильности. |
| Таймаут ответа | 100 – 2000 мс | Максимальное время ожидания ответа от сервера. |
| Параллельные запросы | 5 – 100 потоков | Максимальное количество одновременно опрашиваемых IP (размер семафора). |
| Задержка между пингами | 0 – 500 мс | Пауза перед отправкой следующего пакета на один и тот же IP (снижает риск блокировки). |
- Ввод данных: Скопируйте и вставьте список IP-адресов в текстовое поле ИЛИ нажмите кнопку «Импорт списка из файла» для загрузки своего
.txt/.csv. - Запуск: Нажмите «Запустить тест» (на старых версиях Android приложение запросит разрешение на запись в память для сохранения результатов, на Android 11+ запись идет напрямую в папку Downloads).
- Анализ: На экране результатов вы можете отсортировать сервера (например, вытащить самые стабильные наверх) или отфильтровать откровенный «мусор».
- Копирование/Экспорт: * Кнопка «Копировать» отправит текущий отфильтрованный список 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.