
Un scanner DNS moderne et haute performance doté d'une belle interface utilisateur en terminal (TUI) construite avec Textual. Cet outil peut scanner des millions d'adresses IP pour trouver des serveurs DNS fonctionnels, avec des tests optionnels de proxy Slipstream et un téléchargement automatique du client multi-plateforme.
Le scanner scanne désormais depuis le début et la fin de chaque plage IP simultanément sur plusieurs plages, combiné à un mélange aléatoire — performances plus rapides et meilleure chance de trouver des serveurs DNS fonctionnels par rapport au scan linéaire.
Tous les types DNS (A, AAAA, MX, TXT, NS) sont automatiquement testés et notés par serveur — même système de notation que le scanner SlipNet.
Paramètres de scan entièrement personnalisables :
Scannez avec une valeur MTU spécifiée pour un réglage réseau avancé.
google.com, résultat affiché dans le tableautextual>=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)
### Optionnel
- **Slipstream Client** - Pour la fonctionnalité de test de proxy (5 tests simultanés)
- **Téléchargement automatique** : L'application détecte automatiquement votre plateforme et télécharge le client approprié
- **Détection intelligente** : Détecte les installations existantes (y compris les noms de fichiers hérités)
- **Support de reprise** : Les téléchargements partiels sont sauvegardés et peuvent être repris lors d'une nouvelle tentative
- Plateformes prises en charge :
- 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`
- Téléchargement manuel disponible sur : [versions de slipstream-rust-plus-deploy](https://github.com/Fox-Fig/slipstream-rust-plus-deploy/releases/latest)
### 📦 Clients Slipstream inclus
Des binaires précompilés du client Slipstream (issus du projet plus rapide [Fox-Fig/slipstream-rust-plus-deploy](https://github.com/Fox-Fig/slipstream-rust-plus-deploy)) sont inclus dans le dossier `slipstream-client/` pour toutes les plateformes :
| Plateforme | Chemin | Description |
|----------|------|-------------|
| **Linux x86_64** | `slipstream-client/linux/slipstream-client-linux-amd64` | Binaire Linux x86_64 |
| **Linux ARM64** | `slipstream-client/linux/slipstream-client-linux-arm64` | Binaire Linux ARM64 (Raspberry Pi, serveurs ARM) |
| **Android/Termux** | `slipstream-client/android/slipstream-client-linux-arm64` | Android ARM64 (compatible Termux) |
| **Windows** | `slipstream-client/windows/slipstream-client-windows-amd64.exe` | Exécutable 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 |
> **⚠️ Note Windows :** Le client Windows nécessite les DLL OpenSSL (`libcrypto-3-x64.dll` et `libssl-3-x64.dll`) qui sont incluses dans le dossier `slipstream-client/windows/`. Lors de l'utilisation du téléchargement automatique, ces DLL sont téléchargées automatiquement avec l'exécutable Windows.
#### 📥 Archives tout-en-un
Pour plus de commodité, des archives compressées contenant tous les binaires de plateformes sont disponibles :
- **`slipstream-client/slipstream-client-all-platforms.tar.gz`** - Meilleure compression (recommandée)
- **`slipstream-client/slipstream-client-all-platforms.zip`** - Format convivial pour Windows
Ces archives incluent les clients Linux, Windows et macOS en un seul téléchargement.
### Optionnel
- **SlipNet Client** — Pour les tests de tunnel SlipNet (DNSTT / NoiseDNS)
- **Téléchargement automatique** : L'application détecte automatiquement votre plateforme et télécharge le client SlipNet approprié
- **Détection intelligente** : Détecte les installations existantes
- **Support de reprise** : Les téléchargements partiels sont sauvegardés et peuvent être repris lors d'une nouvelle tentative
- Plateformes prises en charge :
- 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`
- Téléchargement manuel disponible sur : [versions de anonvector](https://github.com/anonvector/SlipNet/releases)
### 📦 Clients SlipNet inclus
Les binaires précompilés du client SlipNet (par [anonvector](https://github.com/anonvector/SlipNet/releases)) sont inclus dans le dossier `slipnet-client/` pour toutes les plateformes :
| Plateforme | Chemin | Description |
|----------|------|-------------|
| **Linux x86_64** | `slipnet-client/linux/slipnet-linux-amd64` | Binaire Linux x86_64 |
| **Linux ARM64** | `slipnet-client/linux/slipnet-linux-arm64` | Binaire Linux ARM64 (Raspberry Pi, serveurs ARM) |
| **Windows** | `slipnet-client/windows/slipnet-windows-amd64.exe` | Exécutable 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 |
## 🚀 Installation
### Méthode 1 : Installer depuis PyPI (Recommandé)
La façon la plus simple d'installer PYDNS Scanner :
#### En utilisant pip```bash
pip install pydns-scanner
pip install pydns-scanner[full]
#### Utilisation de uv (plus rapide)```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
> **Remarque :** Sur Android/Termux, les packages d'extension C optionnels (`google-re2`, `orjson`, `pyperclip`) sont
> automatiquement ignorés — le scanner utilise les équivalents stdlib sans aucune intervention manuelle.
#### Utilisation du miroir (Pour les utilisateurs ayant un accès limité à 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
### Méthode 2 : Exécuter à partir des sources (Manuelle)
Si vous souhaitez exécuter le code directement depuis le dépôt :
#### Étape 1 : Cloner le dépôt```bash
git clone https://github.com/xullexer/PYDNS-Scanner.git
cd PYDNS-Scanner
Utiliser uv (Recommandé - Rapide !)```bash uv pip install -r requirements.txt
**Utilisation de pip**```bash
pip install -r requirements.txt
Utilisation du miroir (Pour les utilisateurs ayant un accès limité à 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
#### Étape 3: Exécuter l'application```bash
python -m python
Depuis PyPI :```bash pydns-scanner
**Depuis la source :**```bash
python -m python
Cela lancera l'interface TUI interactive où vous pouvez configurer :
Créez un fichier texte avec une plage CIDR par ligne :```
1.1.1.0/24 8.8.8.0/24 178.22.122.0/24 185.51.200.0/22
### Exemple de workflow
1. **Lancez l'application** : ```bash
python dnsscanner_tui.py
Configurer les paramètres de scan :
google.com)Démarrer le scan :
Afficher les résultats :
Enregistrer les résultats :
results/TIMESTAMP.csvc ou cliquez sur "💾 Enregistrer les résultats" pour enregistrer manuellementPendant un scan actif :
La journalisation est désactivée par défaut pour garder l'interface propre et éviter des écritures disque inutiles.
Pour activer la journalisation, modifiez 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", )
Lorsque activé :
- Les logs sont sauvegardés dans `logs/dnsscanner_TIMESTAMP.log`
- Rotation automatique à 50 Mo
- Compressé automatiquement (zip)
- Inclut les détails de niveau DEBUG
### Paramètres de concurrence
Ajustez en fonction de votre système et réseau :
- **Faible (50-100)** : Conservateur, adapté aux systèmes lents
- **Moyen (100-300)** : Performance équilibrée
- **Élevé (300-500)** : Scan rapide, nécessite un bon matériel
- **Très élevé (500+)** : Vitesse maximale, peut atteindre les limites des ressources
### Test Slipstream
Le scanner prend en charge les tests parallèles du proxy Slipstream avec téléchargement automatique :```python
# In __init__ method
self.slipstream_max_concurrent = 5 # Max parallel proxy tests
self.slipstream_base_port = 10800 # Base port (uses 10800, 10801, 10802)
Fonctionnalités de téléchargement automatique :
.partial)slipstream-client.exe)Les requêtes DNS expirent après 2 secondes :```python
resolver = aiodns.DNSResolver(nameservers=[ip], timeout=2.0, tries=1)
## 📊 Format de sortie
Les résultats sont enregistrés au **format CSV** (`results/TIMESTAMP.csv`). Les colonnes s'adaptent aux tests activés :```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
Les colonnes facultatives (Proxy Test, Security, EDNS0) ne sont incluses que lorsque le test correspondant est activé dans les paramètres.
Le scanner considère un serveur comme « DNS fonctionnel » si :
Cette approche détecte plus de serveurs DNS fonctionnels que les outils qui n'acceptent que les réponses réussies.
Lorsqu'elle est activée, les requêtes utilisent des préfixes aléatoires :``` original: google.com random: a1b2c3d4.google.com
**Cas d'utilisation** : Contourner les réponses DNS mises en cache
**Prérequis** : Le domaine cible doit avoir un DNS générique (`*.example.com`)
## 📂 Structure du projet```
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
### Erreur "Fichier non trouvé"
- Assurez-vous que le chemin du fichier CIDR est correct
- Utilisez le chemin absolu ou le chemin relatif depuis l'emplacement du script
- Utilisez l'explorateur de fichiers intégré (bouton 📂 Parcourir)
### Scan lent
- Réduisez la valeur de simultanéité
- Vérifiez la bande passante réseau
- Vérifiez les paramètres de délai d'attente DNS
### Utilisation élevée de la mémoire
- Le scanner utilise le streaming pour minimiser l'utilisation mémoire
- Si les problèmes persistent, réduisez la taille des blocs dans `_stream_ips_from_file`
### Échec du téléchargement de Slipstream
- **Problèmes réseau** : L'application réessaie automatiquement jusqu'à 5 fois avec un backoff exponentiel
- **Reprendre** : Les téléchargements partiels sont sauvegardés sous forme de fichiers `.partial` – exécutez à nouveau pour reprendre
- **Téléchargement manuel** : Téléchargez depuis [slipstream-rust-plus-deploy releases](https://github.com/Fox-Fig/slipstream-rust-plus-deploy/releases/latest)
- **Consultez les journaux** : Activez la journalisation (voir section Configuration) pour des informations détaillées sur les erreurs
- **Pare-feu** : Assurez-vous que l'accès à GitHub est autorisé
### Slipstream non détecté
- Vérifiez que le répertoire spécifique à la plateforme existe (`slipstream-client/windows/`, etc.)
- Vérifiez que le nom de fichier correspond (prend en charge les noms nouveaux et anciens)
- Pour les installations anciennes : Utilisez `slipstream-client.exe` (détection automatique)
- Activez la journalisation pour voir le processus de détection
### Échec des tests Slipstream
- Vérifiez que l'exécutable a les bonnes permissions (Linux/macOS : `chmod +x`)
- Vérifiez que les ports 10800-10802 sont disponibles
- Consultez les journaux (si activés) dans le répertoire `logs/`
- Testez manuellement la connectivité aux serveurs DNS
## 📝 Journalisation
**Par défaut : Désactivé** – Aucun journal n'est créé pour garder votre système propre.
**Pour activer la journalisation :**
1. Modifiez `python/dnsscanner_tui.py`
2. Décommentez la section `logger.add()`
3. Les journaux sont sauvegardés dans `logs/dnsscanner_TIMESTAMP.log`
**Niveaux de journalisation :**
- **DEBUG** : Résultats détaillés des requêtes DNS, progression du téléchargement
- **INFO** : Progression du scan et statistiques
- **WARNING** : Problèmes non critiques, tentatives de nouvelle tentative
- **ERROR** : Échecs critiques, erreurs de téléchargement
## 🌍 Trouver des listes CIDR
### Plages IP par pays
**IPv4** :
- https://www.ipdeny.com/ipblocks/data/aggregated/
**IPv6** :
- https://www.ipdeny.com/ipv6/ipaddresses/aggregated/
### Exemple d'utilisation```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
Les contributions sont les bienvenues ! N'hésitez pas à soumettre des pull requests ou à ouvrir des issues.
git clone https://github.com/xullexer/PYDNS-Scanner.git cd PYDNS-Scanner/python pip install -r requirements.txt python dnsscanner_tui.py
## 📄 Licence
Ce projet est sous licence MIT.
## 👨💻 Auteur
- GitHub : [@xullexer](https://github.com/xullexer)
## 🙏 Remerciements
- Construit avec [Textual](https://github.com/Textualize/textual) par Textualize
- Résolution DNS via [aiodns](https://github.com/saghul/aiodns)
- Inspiré par le besoin de découverte efficace de serveurs DNS
- Merci à [**anonvector**](https://github.com/anonvector) pour le développement de **SlipNet CLI** — les binaires clients SlipNet inclus dans ce projet proviennent de son travail
- Le code Python est désormais **modulaire** et plus facile à développer et à maintenir
## 📈 Notes de performance
Performances testées sur divers systèmes :
- **Petit scan** (1 000 adresses IP) : ~10 à 30 secondes
- **Scan moyen** (50 000 adresses IP) : ~5 à 10 minutes
- **Grand scan** (1 M+ adresses IP) : ~1 à 3 heures
*Les résultats varient selon la vitesse du réseau, les réglages de concurrence et les ressources système.*
## 🔐 Considérations de sécurité
- Utilise un générateur de nombres aléatoires cryptographiquement sûr (`secrets.SystemRandom`)
- Aucun identifiant ou donnée sensible n’est journalisé
- Les requêtes DNS sont standards sur UDP/TCP port 53
- Le test de proxy Slipstream est optionnel et désactivé par défaut
## 💝 Soutenir le projet
Si vous trouvez ce projet utile, envisagez de soutenir son développement :
### Dons en cryptomonnaies
- **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`
---
**Bon scan ! 🚀**
| Touche | Moment | Action |
|---|
s | Écran de configuration | Démarrer le scan |
q | À tout moment | Quitter l'application |
c | Pendant le scan | Enregistrer les résultats |
p | Pendant le scan | Mettre en pause |
r | En pause | Reprendre le scan |
x | En pause | Mélanger les IP restantes |