
Современный высокопроизводительный DNS-сканер с красивым терминальным пользовательским интерфейсом (TUI), построенным на Textual. Этот инструмент может сканировать миллионы IP-адресов для поиска работающих DNS-серверов с возможностью дополнительного тестирования прокси Slipstream и автоматической загрузки многоплатформенного клиента.
Сканер теперь одновременно сканирует с начала и конца каждого диапазона IP по нескольким диапазонам в сочетании со случайным перемешиванием — это даёт более высокую производительность и больше шансов найти рабочие DNS-сервера по сравнению с линейным сканированием.
Все типы DNS (A, AAAA, MX, TXT, NS) автоматически тестируются и оцениваются для каждого сервера — та же система оценки, что и в сканере SlipNet.
Полностью настраиваемые параметры сканирования:
Сканирование с заданным значением MTU для продвинутой настройки сети.
google.com, результат отображается в таблицеtextual>=0.47.0 # TUI framework aiodns>=3.1.0 # Async DNS resolver httpx[socks]>=0.25.0 # HTTP client with SOCKS5 support for proxy testing loguru>=0.7.0 # Advanced logging
google-re2>=1.0 # Fast RE2 regex engine (falls back to stdlib re) orjson>=3.9.0 # Fast JSON serialization (falls back to stdlib json) pyperclip>=1.8.0 # Clipboard support (silently disabled when absent)
### Опционально
- **Slipstream Client** - Для тестирования прокси (5 одновременных тестов)
- **Автоматическая загрузка**: Приложение автоматически определяет вашу платформу и загружает правильный клиент
- **Умное обнаружение**: Обнаруживает существующие установки (включая устаревшие имена файлов)
- **Поддержка возобновления**: Частично загруженные файлы сохраняются и могут быть возобновлены при повторной попытке
- Поддерживаемые платформы:
- Linux (x86_64): `slipstream-client-linux-amd64`
- Linux (ARM64): `slipstream-client-linux-arm64`
- Windows (x86_64): `slipstream-client-windows-amd64.exe`
- macOS (ARM64): `slipstream-client-darwin-arm64`
- macOS (Intel): `slipstream-client-darwin-amd64`
- Android (ARM64): `slipstream-client-linux-arm64`
- Ручная загрузка доступна по адресу: [slipstream-rust-plus-deploy releases](https://github.com/Fox-Fig/slipstream-rust-plus-deploy/releases/latest)
### 📦 Встроенные клиенты Slipstream
Предварительно скомпилированные бинарные файлы клиента Slipstream (из более быстрого [Fox-Fig/slipstream-rust-plus-deploy](https://github.com/Fox-Fig/slipstream-rust-plus-deploy)) включены в папку `slipstream-client/` для всех платформ:
| Платформа | Путь | Описание |
|----------|------|-------------|
| **Linux x86_64** | `slipstream-client/linux/slipstream-client-linux-amd64` | Бинарный файл Linux x86_64 |
| **Linux ARM64** | `slipstream-client/linux/slipstream-client-linux-arm64` | Бинарный файл Linux ARM64 (Raspberry Pi, ARM-серверы) |
| **Android/Termux** | `slipstream-client/android/slipstream-client-linux-arm64` | Android ARM64 (совместимо с Termux) |
| **Windows** | `slipstream-client/windows/slipstream-client-windows-amd64.exe` | Исполняемый файл Windows x86_64 |
| **macOS ARM** | `slipstream-client/mac/slipstream-client-darwin-arm64` | macOS Apple Silicon (M1/M2/M3/M4) |
| **macOS Intel** | `slipstream-client/mac/slipstream-client-darwin-amd64` | macOS Intel x86_64 |
> **⚠️ Примечание для Windows:** Клиент Windows требует библиотеки OpenSSL DLL (`libcrypto-3-x64.dll` и `libssl-3-x64.dll`), которые включены в папку `slipstream-client/windows/`. При использовании автоматической загрузки эти DLL-файлы загружаются автоматически вместе с исполняемым файлом Windows.
#### 📥 Архивы all-in-one
Для удобства доступны сжатые архивы, содержащие бинарные файлы всех платформ:
- **`slipstream-client/slipstream-client-all-platforms.tar.gz`** — Лучшее сжатие (рекомендуется)
- **`slipstream-client/slipstream-client-all-platforms.zip`** — Удобный для Windows формат
Эти архивы включают клиенты Linux, Windows и macOS в одной загрузке.
### Опционально
- **SlipNet Client** — Для тестирования туннеля SlipNet (DNSTT / NoiseDNS)
- **Автоматическая загрузка**: Приложение автоматически определяет вашу платформу и загружает правильный клиент SlipNet
- **Умное обнаружение**: Обнаруживает существующие установки
- **Поддержка возобновления**: Частично загруженные файлы сохраняются и могут быть возобновлены при повторной попытке
- Поддерживаемые платформы:
- Linux (x86_64): `slipnet-linux-amd64`
- Linux (ARM64): `slipnet-linux-arm64`
- Windows (x86_64): `slipnet-windows-amd64.exe`
- macOS (ARM64): `slipnet-darwin-arm64`
- macOS (Intel): `slipnet-darwin-amd64`
- Ручная загрузка доступна по адресу: [anonvector releases](https://github.com/anonvector/SlipNet/releases)
### 📦 Встроенные клиенты SlipNet
Предварительно скомпилированные бинарные файлы клиента SlipNet (от [anonvector](https://github.com/anonvector/SlipNet/releases)) включены в папку `slipnet-client/` для всех платформ:
| Платформа | Путь | Описание |
|----------|------|-------------|
| **Linux x86_64** | `slipnet-client/linux/slipnet-linux-amd64` | Бинарный файл Linux x86_64 |
| **Linux ARM64** | `slipnet-client/linux/slipnet-linux-arm64` | Бинарный файл Linux ARM64 (Raspberry Pi, ARM-серверы) |
| **Windows** | `slipnet-client/windows/slipnet-windows-amd64.exe` | Исполняемый файл Windows x86_64 |
| **macOS ARM** | `slipnet-client/mac/slipnet-darwin-arm64` | macOS Apple Silicon (M1/M2/M3/M4) |
| **macOS Intel** | `slipnet-client/mac/slipnet-darwin-amd64` | macOS Intel x86_64 |
## 🚀 Установка
### Способ 1: Установка из PyPI (Рекомендуется)
Самый простой способ установить PYDNS Scanner:
#### Использование pip```bash
pip install pydns-scanner
pip install pydns-scanner[full]
#### Использование uv (Быстрее)```bash
uv pip install pydns-scanner # core
uv pip install pydns-scanner[full] # desktop extras
pkg update && pkg install python pip install pydns-scanner # core only — always works on Termux pydns-scanner
> **Примечание:** На Android/Termux опциональные пакеты с C-расширениями (`google-re2`, `orjson`, `pyperclip`)
> автоматически пропускаются — сканер использует эквиваленты из stdlib без какого-либо ручного вмешательства.
#### Использование зеркала (Для пользователей с ограниченным доступом к PyPI)```bash
# Runflare Mirror
pip install pydns-scanner -i https://mirror-pypi.runflare.com/simple/ --trusted-host mirror-pypi.runflare.com
# Or Alibaba Cloud Mirror
pip install pydns-scanner -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
# Or TUNA Mirror
pip install pydns-scanner -i https://pypi.tuna.tsinghua.edu.cn/simple
pydns-scanner
---
### Метод 2: Запуск из исходного кода (вручную)
Если вы хотите запустить код непосредственно из репозитория:
#### Шаг 1: Клонирование репозитория```bash
git clone https://github.com/xullexer/PYDNS-Scanner.git
cd PYDNS-Scanner
Использование uv (Рекомендуется — быстро!)```bash uv pip install -r requirements.txt
**Использование pip**```bash
pip install -r requirements.txt
Использование зеркала (Для пользователей с ограниченным доступом к PyPI)```bash
pip install -r requirements.txt -i https://mirror-pypi.runflare.com/simple/ --trusted-host mirror-pypi.runflare.com
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
#### Шаг 3: Запуск приложения```bash
python -m python
Из PyPI:```bash pydns-scanner
**Из источника:**```bash
python -m python
Это запустит интерактивный TUI, где вы сможете настроить:
Создайте текстовый файл с одним CIDR диапазоном на строку:```
1.1.1.0/24 8.8.8.0/24 178.22.122.0/24 185.51.200.0/22
### Пример рабочего процесса
1. **Запуск приложения**: ```bash
python dnsscanner_tui.py
Настройте параметры сканирования:
google.com)Запустите сканирование:
Просмотрите результаты:
Сохраните результаты:
results/TIMESTAMP.csvc или нажмите «💾 Save Results», чтобы сохранить вручнуюВо время активного сканирования:
Логирование отключено по умолчанию, чтобы интерфейс оставался чистым и избежать лишних операций записи на диск.
Чтобы включить логирование, отредактируйте dnsscanner_tui.py:```python
logger.remove() # Remove default handler to disable logging
logger.add( "logs/dnsscanner_{time}.log", rotation="50 MB", compression="zip", level="DEBUG", )
При включении:
- Логи сохраняются в `logs/dnsscanner_TIMESTAMP.log`
- Автоматическая ротация при 50 МБ
- Автоматическое сжатие (zip)
- Включает детали уровня DEBUG
### Настройки параллелизма
Настройте в зависимости от вашей системы и сети:
- **Низкий (50-100)**: Консервативный, подходит для медленных систем
- **Средний (100-300)**: Сбалансированная производительность
- **Высокий (300-500)**: Быстрое сканирование, требует хорошего оборудования
- **Очень высокий (500+)**: Максимальная скорость, возможны ограничения ресурсов
### Тестирование Slipstream
Сканер поддерживает параллельное тестирование Slipstream-прокси с автоматической загрузкой:```python
# In __init__ method
self.slipstream_max_concurrent = 5 # Max parallel proxy tests
self.slipstream_base_port = 10800 # Base port (uses 10800, 10801, 10802)
Функции автоматической загрузки:
.partial)slipstream-client.exe)Запросы DNS имеют тайм-аут 2 секунды:```python
resolver = aiodns.DNSResolver(nameservers=[ip], timeout=2.0, tries=1)
## 📊 Формат вывода
Результаты сохраняются в **формате CSV** (`results/TIMESTAMP.csv`). Столбцы адаптируются в зависимости от того, какие тесты включены:```csv
DNS,Ping (ms),IPv4/IPv6,TCP/UDP,Security,EDNS0,Resolved IP,ISP
8.8.8.8,12,IPv4/IPv6,TCP+UDP,DNSSEC,Yes,142.250.185.46,AS15169 Google LLC
1.1.1.1,15,IPv4/IPv6,TCP+UDP,DNSSEC,Yes,142.250.185.46,AS13335 Cloudflare Inc
Необязательные столбцы (Проверка прокси, Безопасность, EDNS0) включаются только при включении соответствующего теста в настройках.
Сканер считает сервер «работающим DNS», если:
Этот подход обнаруживает больше работающих DNS-серверов, чем инструменты, которые принимают только успешные ответы.
При включении запросы используют случайные префиксы:``` original: google.com random: a1b2c3d4.google.com
**Сценарий использования**: Обход кэшированных DNS-ответов
**Требование**: Целевой домен должен иметь подстановочный DNS (`*.example.com`)
## 📂 Структура проекта```
PYDNS-Scanner/
├── README.md # English documentation
├── README-FA.md # Farsi documentation
├── README-ZH.md # Chinese documentation
├── RELEASE_NOTES.md # Release notes (EN / FA / ZH)
├── pyproject.toml # Python package configuration
├── requirements.txt # Python dependencies
├── pydns-scanner.spec # PyInstaller build spec
├── python/
│ ├── __init__.py # Package init
│ ├── __main__.py # Entry point (pydns-scanner CLI)
│ ├── dnsscanner_tui.py # Main TUI application
│ ├── iran-ipv4.cidrs # Sample Iranian CIDR file
│ ├── requirements.txt # Python dependencies (source)
│ ├── scanner/ # Modular scanner package
│ │ ├── __init__.py
│ │ ├── config_mixin.py # Configuration mixin for TUI
│ │ ├── constants.py # Shared constants
│ │ ├── extra_tests.py # Security & EDNS0 tests
│ │ ├── ip_streaming.py # Streaming IP generation from CIDR
│ │ ├── isp_cache.py # ISP detection & caching
│ │ ├── proxy_testing.py # Slipstream proxy testing
│ │ ├── results.py # Result formatting & CSV export
│ │ ├── slipnet.py # SlipNet (DNSTT/NoiseDNS) testing
│ │ ├── slipstream.py # Slipstream client management
│ │ ├── utils.py # Utility functions
│ │ ├── widgets.py # Custom TUI widgets
│ │ └── worker_pool.py # Async worker pool
│ ├── slipstream-client/ # Bundled Slipstream binaries
│ │ ├── linux/
│ │ ├── windows/
│ │ ├── mac/
│ │ └── android/
│ └── slipnet-client/ # Bundled SlipNet binaries
│ ├── linux/
│ ├── windows/
│ └── mac/
├── results/ # Scan results (auto-generated)
├── logs/ # Application logs (when enabled)
└── static/ # Static assets
pip install textual
### Ошибка «Файл не найден»
- Убедитесь, что путь к файлу CIDR указан правильно
- Используйте абсолютный путь или относительный путь от расположения скрипта
- Используйте встроенный файловый браузер (кнопка 📂 Обзор)
### Медленное сканирование
- Уменьшите значение параллельности
- Проверьте пропускную способность сети
- Проверьте настройки тайм-аута DNS
### Высокое использование памяти
- Сканер использует потоковую передачу для минимизации использования памяти
- Если проблемы сохраняются, уменьшите размер чанка в `_stream_ips_from_file`
### Сбой загрузки Slipstream
- **Проблемы с сетью**: приложение автоматически повторяет попытку до 5 раз с экспоненциальной задержкой
- **Возобновление**: частично загруженные файлы сохраняются как `.partial` – просто запустите снова для возобновления
- **Ручная загрузка**: скачайте с [slipstream-rust-plus-deploy releases](https://github.com/Fox-Fig/slipstream-rust-plus-deploy/releases/latest)
- **Проверьте логи**: включите ведение логов (см. раздел Конфигурация) для получения подробной информации об ошибках
- **Брандмауэр**: убедитесь, что доступ к GitHub разрешён
### Slipstream не обнаружен
- Проверьте наличие директории, специфичной для платформы (`slipstream-client/windows/` и т.д.)
- Убедитесь, что имя файла совпадает (поддерживаются как новые, так и устаревшие имена)
- Для устаревших установок: используйте `slipstream-client.exe` (автоматическое обнаружение)
- Включите ведение логов, чтобы увидеть процесс обнаружения
### Тесты Slipstream не проходят
- Убедитесь, что исполняемый файл имеет правильные права доступа (Linux/macOS: `chmod +x`)
- Проверьте, что порты 10800-10802 свободны
- Просмотрите логи (если включены) в директории `logs/`
- Вручную протестируйте связь с DNS-серверами
## 📝 Ведение логов
**По умолчанию: отключено** – логи не создаются, чтобы система оставалась чистой.
**Чтобы включить ведение логов:**
1. Отредактируйте `python/dnsscanner_tui.py`
2. Раскомментируйте раздел `logger.add()`
3. Логи сохраняются в `logs/dnsscanner_TIMESTAMP.log`
**Уровни логирования:**
- **DEBUG**: подробные результаты DNS-запросов, прогресс загрузки
- **INFO**: прогресс сканирования и статистика
- **WARNING**: некритичные проблемы, попытки повторения
- **ERROR**: критические сбои, ошибки загрузки
## 🌍 Поиск списков CIDR
### Диапазоны IP-адресов стран
**IPv4**:
- https://www.ipdeny.com/ipblocks/data/aggregated/
**IPv6**:
- https://www.ipdeny.com/ipv6/ipaddresses/aggregated/
### Пример использования```bash
# Download Iran IPv4 ranges
wget https://www.ipdeny.com/ipblocks/data/aggregated/ir-aggregated.zone -O iran-ipv4.cidrs
# Use in scanner
python dnsscanner_tui.py
# Then select iran-ipv4.cidrs in the file browser
Вклад приветствуется! Пожалуйста, не стесняйтесь отправлять pull requests или открывать issues.
git clone https://github.com/xullexer/PYDNS-Scanner.git cd PYDNS-Scanner/python pip install -r requirements.txt python dnsscanner_tui.py
## 📄 Лицензия
Этот проект лицензирован по лицензии MIT.
## 👨💻 Автор
- GitHub: [@xullexer](https://github.com/xullexer)
## 🙏 Благодарности
- Создано с помощью [Textual](https://github.com/Textualize/textual) от Textualize
- Разрешение DNS через [aiodns](https://github.com/saghul/aiodns)
- Вдохновлено необходимостью эффективного обнаружения DNS-серверов
- Спасибо [**anonvector**](https://github.com/anonvector) за разработку **SlipNet CLI** — встроенные в этот проект бинарные файлы клиента SlipNet взяты из его работы
- Кодовая база Python теперь **модульная** и более проста в разработке и сопровождении
## 📈 Замечания по производительности
Протестированная производительность на различных системах:
- **Малое сканирование** (1 000 IP): ~10-30 секунд
- **Среднее сканирование** (50 000 IP): ~5-10 минут
- **Крупное сканирование** (1 млн+ IP): ~1-3 часа
*Результаты варьируются в зависимости от скорости сети, настроек параллелизма и системных ресурсов.*
## 🔐 Соображения безопасности
- Использует криптографически безопасный генератор случайных чисел (`secrets.SystemRandom`)
- Никакие учетные данные или конфиденциальные данные не записываются в журнал
- DNS-запросы идут через стандартный порт 53 UDP/TCP
- Тестирование прокси Slipstream является опциональным и отключено по умолчанию
## 💝 Поддержите проект
Если вы считаете этот проект полезным, подумайте о поддержке его разработки:
### Пожертвования в криптовалюте
- **Bitcoin (BTC)**
`bc1qpya0kc2uh0mc08c7nuzrqkpsqjr36mrwscgpxr`
- **Solana (SOL)**
`J1XzZfizQ6mgYiyxpLGWU52kHBF1hm2Tb9AZ5FaRj8tH`
- **Ethereum (ETH)**
`0x26D9924B88e71b5908d957EA4c74C66989c253cb`
- **Binance Smart Chain (BNB/BSC)**
`0x26D9924B88e71b5908d957EA4c74C66989c253cb`
- **Tron (TRX)**
`TYBZFr8WUsjgfrXrqmrdF5EXPXo7QdimA8`
- **Ethereum Base**
`0x26D9924B88e71b5908d957EA4c74C66989c253cb`
- **TON (Telegram Open Network)**
`UQBcI_ZZGQq3fcNzTkL-zszgFR5HpRDLFHYRZffizriiScxJ`
---
**Удачного сканирования! 🚀**
| Клавиша | Когда | Действие |
|---|
s | Экран конфигурации | Начать сканирование |
q | В любое время | Выйти из приложения |
c | Во время сканирования | Сохранить результаты |
p | Во время сканирования | Приостановить сканирование |
r | Когда приостановлено | Возобновить сканирование |
x | Когда приостановлено | Перемешать оставшиеся IP |