
현대적이고 고성능의 DNS 스캐너로, Textual로 구축된 아름다운 터미널 사용자 인터페이스(TUI)를 갖추고 있습니다. 이 도구는 수백만 개의 IP 주소를 스캔하여 작동하는 DNS 서버를 찾을 수 있으며, 선택적 Slipstream 프록시 테스트와 자동 멀티 플랫폼 클라이언트 다운로드 기능을 제공합니다.
스캐너는 이제 여러 범위에 걸쳐 각 IP 범위의 시작과 끝에서 동시에 스캔하며 무작위 셔플과 결합되어 선형 스캔에 비해 더 빠른 성능과 작동하는 DNS 서버를 찾을 확률이 높아집니다.
모든 DNS 유형(A, AAAA, MX, TXT, NS)이 서버별로 자동으로 테스트되고 점수가 매겨집니다. SlipNet 스캐너와 동일한 점수 시스템입니다.
완전히 사용자 정의 가능한 스캔 매개변수:
고급 네트워크 튜닝을 위해 지정된 MTU 값으로 스캔합니다.
google.com을 확인하여 각 DNS 서버 테스트, 결과가 테이블에 표시됨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 클라이언트** — 프록시 테스트 기능용 (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 릴리스](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/` 폴더에 포함되어 있습니다. 자동 다운로드를 사용하면 Windows 실행 파일과 함께 이러한 DLL이 자동으로 다운로드됩니다.
#### 📥 올인원 아카이브
편의를 위해 모든 플랫폼 바이너리를 포함한 압축 아카이브가 제공됩니다:
- **`slipstream-client/slipstream-client-all-platforms.tar.gz`** — 최고 압축률 (권장)
- **`slipstream-client/slipstream-client-all-platforms.zip`** — Windows 친화적 형식
이 아카이브에는 Linux, Windows 및 macOS 클라이언트가 단일 다운로드에 포함되어 있습니다.
### 선택사항
- **SlipNet 클라이언트** — 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 릴리스](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 범위를 포함하는 텍스트 파일을 생성하세요:
192.168.1.0/24
10.0.0.0/8
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.csv에 저장됨c 키를 누르거나 "💾 결과 저장"을 클릭하여 수동 저장활성 스캔 중:
로깅은 기본적으로 비활성화되어 있어 인터페이스를 깔끔하게 유지하고 불필요한 디스크 쓰기를 방지합니다.
로깅을 활성화하려면 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`에 저장됩니다.
- 50MB에서 자동 회전
- 자동 압축 (zip)
- DEBUG 수준 세부 정보 포함
### 동시성 설정
시스템 및 네트워크에 따라 조정하세요:
- **Low (50-100)**: 보수적, 느린 시스템에 적합
- **Medium (100-300)**: 균형 잡힌 성능
- **High (300-500)**: 빠른 스캔, 좋은 하드웨어 필요
- **Very High (500+)**: 최대 속도, 리소스 제한에 도달할 수 있음
### 슬립스트림 테스트
스캐너는 자동 다운로드와 함께 병렬 슬립스트림 프록시 테스트를 지원합니다:```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
Optional columns (Proxy Test, Security, EDNS0) are included only when the corresponding test is enabled in settings.
스캐너는 다음 조건을 충족하는 서버를 '작동 중인 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 릴리스](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
기여를 환영합니다! 풀 리퀘스트를 제출하거나 이슈를 열어 주세요.
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)로 구축됨
- [aiodns](https://github.com/saghul/aiodns)를 통한 DNS 해석
- 효율적인 DNS 서버 탐색의 필요성에서 영감을 받음
- **SlipNet CLI**를 개발한 [**anonvector**](https://github.com/anonvector)에게 감사 — 이 프로젝트에 포함된 SlipNet 클라이언트 바이너리는 그들의 작업에서 비롯됨
- Python 코드베이스는 이제 **모듈화**되어 개발 및 유지보수가 더 쉬워짐
## 📈 성능 참고 사항
다양한 시스템에서 성능 테스트 완료:
- **소규모 스캔** (1,000 IP): 약 10~30초
- **중간 규모 스캔** (50,000 IP): 약 5~10분
- **대규모 스캔** (100만+ IP): 약 1~3시간
*결과는 네트워크 속도, 동시성 설정 및 시스템 리소스에 따라 다릅니다.*
## 🔐 보안 고려 사항
- 암호학적으로 안전한 난수 생성기(`secrets.SystemRandom`) 사용
- 자격 증명이나 민감한 데이터는 기록되지 않음
- DNS 쿼리는 표준 UDP/TCP 포트 53 사용
- Slipstream 프록시 테스트는 선택 사항이며 기본적으로 비활성화되어 있음
## 💝 프로젝트 지원
이 프로젝트가 유용하다고 생각되면 개발을 지원하는 것을 고려해 주세요:
### 암호화폐 기부
- **비트코인 (BTC)**
`bc1qpya0kc2uh0mc08c7nuzrqkpsqjr36mrwscgpxr`
- **솔라나 (SOL)**
`J1XzZfizQ6mgYiyxpLGWU52kHBF1hm2Tb9AZ5FaRj8tH`
- **이더리움 (ETH)**
`0x26D9924B88e71b5908d957EA4c74C66989c253cb`
- **바이낸스 스마트 체인 (BNB/BSC)**
`0x26D9924B88e71b5908d957EA4c74C66989c253cb`
- **트론 (TRX)**
`TYBZFr8WUsjgfrXrqmrdF5EXPXo7QdimA8`
- **이더리움 베이스**
`0x26D9924B88e71b5908d957EA4c74C66989c253cb`
- **TON (텔레그램 오픈 네트워크)**
`UQBcI_ZZGQq3fcNzTkL-zszgFR5HpRDLFHYRZffizriiScxJ`
---
**즐거운 스캔 하세요! 🚀**
| 키 | 사용 시기 | 동작 |
|---|
s | 설정 화면 | 스캔 시작 |
q | 언제든지 | 애플리케이션 종료 |
c | 스캔 중 | 결과 저장 |
p | 스캔 중 | 스캔 일시 정지 |
r | 일시 정지 중 | 스캔 재개 |
x | 일시 정지 중 | 남은 IP 섞기 |