
Un moderno scanner DNS ad alte prestazioni con una bellissima interfaccia utente terminale (TUI) costruita con Textual. Questo strumento può scansionare milioni di indirizzi IP per trovare server DNS funzionanti, con test opzionale del proxy Slipstream e download automatico del client multi-piattaforma.
Lo scanner ora scansiona dall'inizio e dalla fine di ciascun intervallo IP simultaneamente su più intervalli, combinato con un mescolamento casuale — prestazioni più elevate e maggiore probabilità di trovare server DNS funzionanti rispetto alla scansione lineare.
Tutti i tipi DNS (A, AAAA, MX, TXT, NS) vengono testati e valutati automaticamente per server — lo stesso sistema di punteggio dello scanner SlipNet.
Parametri di scansione completamente personalizzabili:
Scansiona con un valore MTU specificato per una regolazione avanzata della rete.
google.com, risultato mostrato in tabellatextual>=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)
### Opzionale
- **Slipstream Client** - Per funzionalità di test proxy (5 test concorrenti)
- **Download automatico**: L'applicazione rileva automaticamente la tua piattaforma e scarica il client corretto
- **Rilevamento intelligente**: Rileva installazioni esistenti (inclusi nomi file legacy)
- **Supporto ripresa**: Download parziali vengono salvati e possono essere ripresi al nuovo tentativo
- Piattaforme supportate:
- 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`
- Download manuale disponibile da: [slipstream-rust-plus-deploy releases](https://github.com/Fox-Fig/slipstream-rust-plus-deploy/releases/latest)
### 📦 Client Slipstream Inclusi
Binari precompilati del client Slipstream (dal più veloce [Fox-Fig/slipstream-rust-plus-deploy](https://github.com/Fox-Fig/slipstream-rust-plus-deploy)) sono inclusi nella cartella `slipstream-client/` per tutte le piattaforme:
| Piattaforma | Percorso | Descrizione |
|----------|------|-------------|
| **Linux x86_64** | `slipstream-client/linux/slipstream-client-linux-amd64` | Binario Linux x86_64 |
| **Linux ARM64** | `slipstream-client/linux/slipstream-client-linux-arm64` | Binario Linux ARM64 (Raspberry Pi, server ARM) |
| **Android/Termux** | `slipstream-client/android/slipstream-client-linux-arm64` | Android ARM64 (compatibile Termux) |
| **Windows** | `slipstream-client/windows/slipstream-client-windows-amd64.exe` | Eseguibile 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 |
> **⚠️ Nota per Windows:** Il client Windows richiede le DLL OpenSSL (`libcrypto-3-x64.dll` e `libssl-3-x64.dll`) che sono incluse nella cartella `slipstream-client/windows/`. Quando si utilizza il download automatico, queste DLL vengono scaricate automaticamente insieme all'eseguibile Windows.
#### 📥 Archivi tutto-in-uno
Per comodità, archivi compressi contenenti tutti i binari per piattaforma sono disponibili:
- **`slipstream-client/slipstream-client-all-platforms.tar.gz`** - Migliore compressione (consigliato)
- **`slipstream-client/slipstream-client-all-platforms.zip`** - Formato compatibile Windows
Questi archivi includono client Linux, Windows e macOS in un unico download.
### Opzionale
- **SlipNet Client** — Per test di tunnel SlipNet (DNSTT / NoiseDNS)
- **Download automatico**: L'applicazione rileva automaticamente la tua piattaforma e scarica il client SlipNet corretto
- **Rilevamento intelligente**: Rileva installazioni esistenti
- **Supporto ripresa**: Download parziali vengono salvati e possono essere ripresi al nuovo tentativo
- Piattaforme supportate:
- 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`
- Download manuale disponibile da: [anonvector releases](https://github.com/anonvector/SlipNet/releases)
### 📦 Client SlipNet Inclusi
Binari precompilati del client SlipNet (da [anonvector](https://github.com/anonvector/SlipNet/releases)) sono inclusi nella cartella `slipnet-client/` per tutte le piattaforme:
| Piattaforma | Percorso | Descrizione |
|----------|------|-------------|
| **Linux x86_64** | `slipnet-client/linux/slipnet-linux-amd64` | Binario Linux x86_64 |
| **Linux ARM64** | `slipnet-client/linux/slipnet-linux-arm64` | Binario Linux ARM64 (Raspberry Pi, server ARM) |
| **Windows** | `slipnet-client/windows/slipnet-windows-amd64.exe` | Eseguibile 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 |
## 🚀 Installazione
### Metodo 1: Installazione da PyPI (Consigliato)
Il modo più semplice per installare PYDNS Scanner:
#### Usando pip```bash
pip install pydns-scanner
pip install pydns-scanner[full]
#### Usando uv (Più veloce)```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
> **Nota:** Su Android/Termux i pacchetti opzionali di estensione C (`google-re2`, `orjson`, `pyperclip`) vengono
> saltati automaticamente — lo scanner torna a usare gli equivalenti della libreria standard senza alcun intervento manuale.
#### Utilizzo del Mirror (Per utenti con accesso limitato a 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
---
### Metodo 2: Esecuzione dal Sorgente (Manuale)
Se vuoi eseguire il codice direttamente dal repository:
#### Passo 1: Clona il Repository```bash
git clone https://github.com/xullexer/PYDNS-Scanner.git
cd PYDNS-Scanner
Usando uv (Consigliato - Veloce!)```bash uv pip install -r requirements.txt
**Usando pip**```bash
pip install -r requirements.txt
Utilizzo del Mirror (per utenti con accesso limitato a 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
#### Passo 3: Esegui l'applicazione```bash
python -m python
Da PyPI:```bash pydns-scanner
**Dalla fonte:**```bash
python -m python
Questo avvierà la TUI interattiva dove puoi configurare:
Crea un file di testo con un intervallo CIDR per riga:```
1.1.1.0/24 8.8.8.0/24 178.22.122.0/24 185.51.200.0/22
### Esempio di flusso di lavoro
1. **Avvia l'applicazione**: ```bash
python dnsscanner_tui.py
Configura i parametri di scansione:
google.com)Avvia la scansione:
Visualizza i risultati:
Salva i risultati:
results/TIMESTAMP.csvc o clicca su "💾 Save Results" per salvare manualmenteDurante una scansione attiva:
La registrazione è disabilitata per impostazione predefinita per mantenere l'interfaccia pulita ed evitare scritture su disco non necessarie.
Per abilitare la registrazione, modifica 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", )
Quando abilitato:
- I log vengono salvati in `logs/dnsscanner_TIMESTAMP.log`
- Rotazione automatica a 50 MB
- Compresso automaticamente (zip)
- Include dettagli a livello DEBUG
### Impostazioni di concorrenza
Regola in base al sistema e alla rete:
- **Bassa (50-100)**: Conservativa, adatta per sistemi più lenti
- **Media (100-300)**: Prestazioni bilanciate
- **Alta (300-500)**: Scansione veloce, richiede hardware adeguato
- **Molto alta (500+)**: Velocità massima, potrebbe raggiungere i limiti delle risorse
### Slipstream Testing
Lo scanner supporta test proxy Slipstream paralleli con download automatico:```python
# In __init__ method
self.slipstream_max_concurrent = 5 # Max parallel proxy tests
self.slipstream_base_port = 10800 # Base port (uses 10800, 10801, 10802)
Auto-Download Features:
.partial)slipstream-client.exe)Le query DNS scadono dopo 2 secondi:```python
resolver = aiodns.DNSResolver(nameservers=[ip], timeout=2.0, tries=1)
## 📊 Formato di output
I risultati vengono salvati in **formato CSV** (`results/TIMESTAMP.csv`). Le colonne si adattano a quali test sono abilitati:```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
Colonne opzionali (Proxy Test, Security, EDNS0) sono incluse solo quando il test corrispondente è abilitato nelle impostazioni.
Lo scanner considera un server come 'DNS funzionante' se:
Questo approccio individua più server DNS funzionanti rispetto agli strumenti che accettano solo risposte con successo.
Quando abilitata, le query utilizzano prefissi casuali:``` original: google.com random: a1b2c3d4.google.com
**Caso d'uso**: Bypassare le risposte DNS memorizzate nella cache
**Requisito**: Il dominio target deve avere un DNS wildcard (`*.example.com`)
## 📂 Struttura del progetto```
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
### errore "File non trovato"
- Assicurati che il percorso del file CIDR sia corretto
- Usa un percorso assoluto o relativo dalla posizione dello script
- Usa il file browser integrato (pulsante 📂 Sfoglia)
### Scansione lenta
- Riduci il valore di concorrenza
- Controlla la larghezza di banda della rete
- Verifica le impostazioni di timeout DNS
### Utilizzo elevato di memoria
- Lo scanner utilizza lo streaming per ridurre al minimo la memoria
- Se i problemi persistono, riduci la dimensione del blocco in `_stream_ips_from_file`
### Download di Slipstream fallito
- **Problemi di rete**: L'app riprova automaticamente fino a 5 volte con backoff esponenziale
- **Riprendi**: I download parziali vengono salvati come file `.partial` - basta eseguire di nuovo per riprendere
- **Download manuale**: Scarica da [slipstream-rust-plus-deploy releases](https://github.com/Fox-Fig/slipstream-rust-plus-deploy/releases/latest)
- **Controlla i log**: Abilita la registrazione (vedi sezione Configurazione) per informazioni dettagliate sugli errori
- **Firewall**: Assicurati che l'accesso a GitHub sia consentito
### Slipstream non rilevato
- Controlla che esista la directory specifica per la piattaforma (`slipstream-client/windows/`, ecc.)
- Verifica che il nome del file corrisponda (supporta sia nomi nuovi che legacy)
- Per installazioni legacy: Usa `slipstream-client.exe` (rilevato automaticamente)
- Abilita la registrazione per vedere il processo di rilevamento
### Test di Slipstream falliti
- Verifica che l'eseguibile abbia i permessi corretti (Linux/macOS: `chmod +x`)
- Controlla che le porte 10800-10802 siano disponibili
- Esamina i log (se abilitati) nella directory `logs/`
- Testa manualmente la connettività ai server DNS
## 📝 Registrazione
**Default: Disabilitato** - Non vengono creati log per mantenere il sistema pulito.
**Per abilitare la registrazione:**
1. Modifica `python/dnsscanner_tui.py`
2. Rimuovi il commento dalla sezione `logger.add()`
3. I log vengono salvati in `logs/dnsscanner_TIMESTAMP.log`
**Livelli di log:**
- **DEBUG**: Risultati dettagliati delle query DNS, progresso del download
- **INFO**: Progresso della scansione e statistiche
- **WARNING**: Problemi non critici, tentativi di ripetizione
- **ERROR**: Errori critici, errori di download
## 🌍 Trovare le liste CIDR
### Intervalli IP per Paese
**IPv4**:
- https://www.ipdeny.com/ipblocks/data/aggregated/
**IPv6**:
- https://www.ipdeny.com/ipv6/ipaddresses/aggregated/
### Esempio di utilizzo```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
I contributi sono benvenuti! Sentiti libero di inviare pull request o aprire issue.
git clone https://github.com/xullexer/PYDNS-Scanner.git cd PYDNS-Scanner/python pip install -r requirements.txt python dnsscanner_tui.py
## 📄 Licenza
Questo progetto è concesso in licenza MIT.
## 👨💻 Autore
- GitHub: [@xullexer](https://github.com/xullexer)
## 🙏 Riconoscimenti
- Realizzato con [Textual](https://github.com/Textualize/textual) di Textualize
- Risoluzione DNS tramite [aiodns](https://github.com/saghul/aiodns)
- Ispirato dalla necessità di scoprire efficientemente server DNS
- Grazie a [**anonvector**](https://github.com/anonvector) per aver sviluppato la **SlipNet CLI** — i binari client SlipNet inclusi in questo progetto provengono dal suo lavoro
- Il codice Python è ora **modulare** e più facile da sviluppare e mantenere
## 📈 Note sulle prestazioni
Prestazioni testate su vari sistemi:
- **Scansione piccola** (1.000 IP): ~10-30 secondi
- **Scansione media** (50.000 IP): ~5-10 minuti
- **Scansione grande** (1M+ IP): ~1-3 ore
*I risultati variano in base alla velocità di rete, alle impostazioni di concorrenza e alle risorse del sistema.*
## 🔐 Considerazioni sulla sicurezza
- Utilizza un generatore di numeri casuali crittograficamente sicuro (`secrets.SystemRandom`)
- Nessuna credenziale o dato sensibile viene registrato
- Le query DNS sono standard sulla porta UDP/TCP 53
- Il test del proxy Slipstream è opzionale e disabilitato per impostazione predefinita
## 💝 Supporta il progetto
Se trovi utile questo progetto, considera di supportarne lo sviluppo:
### Donazioni in criptovaluta
- **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`
---
**Buona scansione! 🚀**
| Tasto | Quando | Azione |
|---|
s | Schermata di configurazione | Avvia scansione |
q | Sempre | Esci dall'applicazione |
c | Durante la scansione | Salva i risultati |
p | Durante la scansione | Metti in pausa la scansione |
r | Quando in pausa | Riprendi scansione |
x | Quando in pausa | Mescola gli IP rimanenti |