Легковесное, быстрое и приватное 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.