文章总结: PYDNSScanner是一款基于Python的高性能DNS扫描工具,配备现代化TUI界面,支持大规模IP扫描以发现可用DNS服务器。工具集成Slipstream代理测试、随机子域名生成及断点续传功能,具备智能DNS检测与流式IP生成优势。文档详述了版本更新、安装步骤、配置方法及故障排除,适合安全人员进行DNS探测,建议通过PyPI安装并调整并发数以优化性能。 综合评分: 90 文章分类: 安全工具,渗透测试
【渗透工具】——PYDNS扫描器
原创
网络安全民工 网络安全民工
网络安全民工
2026年2月24日 21:38 天津
一款现代化的高性能 DNS 扫描器,拥有美观的终端用户界面 (TUI),采用 Textual 语言编写。 该工具可以扫描数百万个 IP 地址,查找可用的 DNS 服务器,并可选配 Slipstream 代理测试和自动多平台客户端下载功能。
🎉 v1.2.0 版本新增功能
🎨 视觉和用户体验改进
- 小屏幕支持– 修复了小屏幕设备上可滚动表单的高度问题
- 增强状态跟踪– 实时显示通过/失败/找到的统计信息,并以颜色编码显示(白色=找到,绿色=通过,红色=失败)
- 失败的服务器位于末尾– 失败的代理测试现在显示在结果列表的底部
🔐 代理身份验证
- 代理身份验证支持– 新增代理身份验证切换复选框
- 用户名/密码字段– 默认隐藏,启用代理身份验证后显示。
- HTTP 和 SOCKS5 身份验证– 身份验证同时应用于 HTTP 和 SOCKS5 代理测试
⌨️ 键盘快捷键
- S – 开始扫描(从配置屏幕)
- 问:退出应用程序
- C – 将结果保存到文件
- P – 暂停扫描(扫描时)
- R – 恢复扫描(暂停后)
- X – 重新排列剩余 IP 地址(暂停时)
🔔 音频效果提升
- 单枚硬币音效– 代理测试成功时,发出清晰的单枚硬币闪光/通知
📦 v1.1.0 版本更新内容
🎨 视觉和用户体验改进
- GitHub 深色主题– 漂亮的深色模式,采用 GitHub 风格的颜色(#0d1117 背景色,#58a6ff 强调色)
- 全屏开始菜单– 配置表单现在使用终端的全部高度/宽度
- 改进下拉菜单– 修复了下拉菜单的样式,使其高度和文本可见性均符合预期。
- 精简复选框– 所有选项(随机子域名、代理测试、铃声)显示在同一行
⚡ 性能提升
- 5 项并发代理测试– 从 3 项并行 Slipstream 测试增加到 5 项(端口 10800-10804)
- 更好的退出处理– 正确恢复退出时的终端状态,包括光标恢复和输入恢复
🌍 CIDR 管理
- 捆绑式伊朗IP地址– 预加载约1000万个伊朗IPv4地址(iran-ipv4.cidrs)
- CIDR下拉菜单– 轻松选择伊朗默认文件和自定义文件
- 域名缓存– 跨会话记住上次使用的域名
✨ 特点
- 🎨美观的 TUI 界面– GitHub 深色主题终端界面
- ⚡高性能– 异步扫描,并发性可配置
- ⏸️暂停/恢复/随机播放– 完全扫描控制
- 📊实时统计– 实时进度跟踪和扫描指标
- 🔍智能 DNS 检测– 即使出现错误响应(NXDOMAIN、NODATA),也能检测出可用的 DNS 服务器
- 🎲随机子域名支持– 使用随机子域名避免缓存响应
- 🌐支持多种 DNS 类型– 支持 A、AAAA、MX、TXT、NS 记录
- 🔌 Slipstream 集成– 可选的代理测试,支持 5 个并行执行
- 🌍多平台自动下载– 自动下载适用于您平台的正确 Slipstream 客户端
- 📥断点续传– 网络中断时智能断点续传,并带有重试逻辑
- 💾自动保存结果– 自动将扫描结果导出为 JSON 格式
- 📁 CIDR 管理– 内置伊朗 IP 地址 + 自定义文件选择器
- ⚙️可配置– 可调节并发数、超时时间和过滤器
- 🚀内存高效– 无需将所有 IP 地址加载到内存即可流式生成 IP 地址
- 📝可选日志记录– 默认禁用,可轻松启用以进行故障排除
- 🔔音频提示– 代理测试成功时可选择发出闪光音效
📋 要求
Python 版本
- Python 3.11 或更高版本
依赖关系
# Core dependenciestextual>=0.47.0 # TUI frameworkaiodns>=3.1.0 # Async DNS resolverhttpx[socks]>=0.25.0 # HTTP client with SOCKS5 support for proxy testingorjson>=3.9.0 # Fast JSON serializationloguru>=0.7.0 # Advanced loggingpyperclip>=1.8.0 # Clipboard support
选修的
-
Slipstream 客户端– 用于代理测试功能(5 个并发测试)
-
Linux (x86_64):
slipstream-client-linux-amd64 -
Windows (x86_64):
slipstream-client-windows-amd64.exe -
macOS(ARM64):
slipstream-client-darwin-arm64 -
macOS(Intel):
slipstream-client-darwin-amd64 -
自动下载:应用程序会自动检测您的平台并下载正确的客户端。
-
智能检测:检测现有安装(包括旧式文件名)
-
支持断点续传:部分下载将被保存,重试时可以继续下载。
-
支持的平台:
-
可从以下位置下载手动版本:slipstream-rust-deploy releases
📦 捆绑式 Slipstream 客户端
slipstream-client/文件夹中包含了适用于所有平台的预编译 Slipstream 客户端二进制文件:
| 平台 | 小路 | 描述 |
| — | — | — |
| Linux | slipstream-client/linux/slipstream-client-linux-amd64 | Linux x86_64 二进制文件 |
| 视窗 | slipstream-client/windows/slipstream-client-windows-amd64.exe | Windows x86_64 可执行文件 |
| macOS ARM | slipstream-client/mac/slipstream-client-darwin-arm64 | macOS 苹果芯片(M1/M2/M3) |
| macOS 英特尔 | 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 可执行文件一起自动下载。
📥 一体化存档
为方便起见,我们提供了包含所有平台二进制文件的压缩包:
slipstream-client/slipstream-client-all-platforms.tar.gz– 最佳压缩(推荐)slipstream-client/slipstream-client-all-platforms.zip– Windows 兼容格式
这些压缩包包含 Linux、Windows 和 macOS 客户端,只需一次下载即可获得。
🚀 安装
方法一:从 PyPI 安装(推荐)
安装 PYDNS Scanner 的最简单方法:
使用 pip
pip install pydns-scanner
使用紫外线(速度更快)
uv pip install pydns-scanner
使用镜像(适用于 PyPI 访问权限有限的用户)
# Runflare Mirrorpip install pydns-scanner -i https://mirror-pypi.runflare.com/simple/ --trusted-host mirror-pypi.runflare.com# Or Alibaba Cloud Mirrorpip install pydns-scanner -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com# Or TUNA Mirrorpip install pydns-scanner -i https://pypi.tuna.tsinghua.edu.cn/simple
安装后运行
pydns-scanner
方法二:从源代码运行(手动)
如果您想直接从代码库运行代码:
第一步:克隆代码库
git clone https://github.com/xullexer/PYDNS-Scanner.gitcd PYDNS-Scanner
步骤二:安装依赖项
使用紫外线(推荐 – 快速!)
uv pip install -r requirements.txt
使用 pip
pip install -r requirements.txt
使用镜像(适用于 PyPI 访问权限有限的用户)
# Runflare Mirrorpip install -r requirements.txt -i https://mirror-pypi.runflare.com/simple/ --trusted-host mirror-pypi.runflare.com# Or Alibaba Cloud Mirrorpip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com# Or TUNA Mirrorpip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
步骤 3:运行应用程序
python -m python
🎮 用法
基本用法
来自 PyPI:
pydns-scanner
来源:
python -m python
这将启动交互式用户界面 (TUI),您可以在其中进行配置:
- CIDR 文件:包含 IP 地址范围(CIDR 表示法)的文件路径
- 域名:要查询的域名(例如,google.com)
- DNS 类型:记录类型(A、AAAA、MX、TXT、NS)
- 并发数:并行工作进程数(默认值:100)
- 随机子域名:添加随机前缀以避免缓存响应
- Slipstream 测试:启用已找到的 DNS 服务器的代理测试
CIDR 文件格式
创建一个文本文件,每行包含一个 CIDR 范围:
# Comments start with #
1.1.1.0/24
8.8.8.0/24
178.22.122.0/24
185.51.200.0/22
示例工作流程
- 启动应用程序:
python dnsscanner_tui.py
- 配置扫描参数:
- 点击“📂浏览”选择您的CIDR文件
- 输入域名(例如,
google.com) - 设置并发数(建议:100-500)
- 根据需要启用选项
- 开始扫描:
- 点击“🚀 开始扫描”
- 实时查看进度和结果
- 随时使用“⏸ 暂停”暂停扫描
- 使用“▶ 继续”从上次暂停的地方继续。
- 查看结果:
- 按响应时间排序(最快排在最前面)
- 绿色 = 快速(<100毫秒)
- 黄色 = 中等 (100-300毫秒)
- 红色 = 慢(>300毫秒)
- 保存结果:
- 结果会自动保存。
results/TIMESTAMP.txt - 按
s或点击“💾 保存结果”手动保存。
⌨️ 键盘快捷键
| 钥匙 | 什么时候 | 行动 |
| — | — | — |
| s | 配置屏幕 | 开始扫描 |
| q | 随时 | 退出应用程序 |
| c | 扫描时 | 保存结果 |
| p | 扫描时 | 暂停扫描 |
| r | 暂停时 | 恢复扫描 |
| x | 暂停时 | 重新排列剩余的IP地址 |
🎮 控制按钮
在进行扫描过程中:
- ⏸ 暂停– 暂停扫描而不丢失进度
- ▶ 继续扫描– 从上次暂停的地方继续扫描
- 💾 保存结果– 手动保存当前结果
- 🛑 退出– 退出应用程序
🎛️ 配置
日志记录
默认情况下禁用日志记录,以保持界面简洁并避免不必要的磁盘写入。
要启用日志记录,请编辑dnsscanner_tui.py:
# Configure logging (disabled by default)logger.remove() # Remove default handler to disable logging# Uncomment the line below to enable file logginglogger.add("logs/dnsscanner_{time}.log", rotation="50 MB", compression="zip", level="DEBUG",)
启用后:
- 日志保存到
logs/dnsscanner_TIMESTAMP.log - 自动旋转,文件大小为 50 MB
- 自动压缩(zip)
- 包含调试级别详细信息
并发设置
请根据您的系统和网络情况进行调整:
- 低(50-100):保守,适用于速度较慢的系统。
- 中等(100-300):均衡性能
- 高(300-500):扫描速度快,需要性能良好的硬件。
- 非常高(500+):最高速度,可能达到资源限制
滑流测试
该扫描器支持并行 Slipstream 代理测试,并可自动下载:
# In __init__ methodself.slipstream_max_concurrent=3# Max parallel proxy testsself.slipstream_base_port=10800# Base port (uses 10800, 10801, 10802)
自动下载功能:
- 平台检测(Windows/Linux/macOS + 架构)
- 进度条显示下载速度
- 中断后恢复(保留
.partial文件) - 使用指数退避策略重试(最多尝试 5 次)
- 旧式文件名检测(
slipstream-client.exe)
DNS超时
DNS 查询超时时间为 2 秒:
# In _test_dns methodresolver=aiodns.DNSResolver(nameservers=[ip], timeout=2.0, tries=1)
📊 输出格式
结果以JSON格式保存:
{"scan_info":{"domain":"google.com","dns_type":"A","slipstream_test":true,"total_found":50,"total_passed_proxy":42,"total_saved":42,"elapsed_seconds":300.5,"timestamp":"2026-01-26_10-30-45"},"servers":["8.8.8.8","1.1.1.1","..."]}
🔍工作原理
DNS检测逻辑
如果满足以下条件,扫描器会将服务器视为“正常工作的 DNS 服务器”:
- 响应成功:在 2 秒内返回有效的 DNS 应答
- DNS 错误响应:在 2 秒内返回 NXDOMAIN、NODATA 或 NXRRSET。
- 这些错误意味着 DNS 服务器运行正常,只是记录不存在。
这种方法比只接受成功响应的工具能捕获更多可用的 DNS 服务器。
性能优化
- 流媒体 IP 生成:IP 地址根据 CIDR 范围动态生成。
- 分块处理:以 500 个 IP 地址为一批进行处理
- 异步 I/O:使用 aiodns 进行非阻塞 DNS 查询
- 信号量控制:限制并发操作以防止资源耗尽
- 内存映射:尽可能使用 mmap 快速读取 CIDR 文件
随机子域名功能
启用此功能后,查询将使用随机前缀:
original: google.com
random: a1b2c3d4.google.com
使用场景:绕过缓存的 DNS 响应 要求:目标域名应支持通配符 DNS(*.example.com)
📂 目录结构
PYDNS-Scanner/
├── README.md # This file
├── python/
│ ├── dnsscanner_tui.py # Main application
│ ├── requirements.txt # Python dependencies
│ └── iran-ipv4.cidrs # Sample CIDR file
├── logs/ # Application logs (when enabled, gitignored)
├── results/ # Scan results (gitignored)
└── slipstream-client/ # Slipstream binaries (auto-downloaded, gitignored)
├── windows/
├── linux/
└── macos/
🐛故障排除
“没有名为‘textual’的模块”
pip install textual
“文件未找到”错误
- 请确保 CIDR 文件路径正确
- 使用脚本位置的绝对路径或相对路径
- 使用内置文件浏览器(📂 浏览按钮)
慢速扫描
- 降低并发值
- 检查网络带宽
- 验证 DNS 超时设置
内存使用率高
- 该扫描仪采用流式传输技术以最大限度地减少内存占用
- 如果问题仍然存在,请减小数据块大小。
_stream_ips_from_file
Slipstream 下载失败
- 网络问题:应用会自动重试最多 5 次,采用指数退避策略。
- 恢复下载:部分下载会保存为
.partial文件 – 只需再次运行即可恢复下载。 - 手动下载:从slipstream-rust-deploy releases下载
- 查看日志:启用日志记录(请参阅“配置”部分)以获取详细的错误信息
- 防火墙:确保允许访问 GitHub
未检测到尾流
- 检查平台特定目录是否存在(
slipstream-client/windows/,等等) - 验证文件名是否匹配(支持新旧文件名)
- 对于旧版安装:使用
slipstream-client.exe(自动检测) - 启用日志记录以查看检测过程
滑流测试失败
- 验证可执行文件是否具有正确的权限(Linux/macOS
chmod +x:) - 请检查端口 10800-10802 是否可用
- 查看
logs/目录中的日志(如果已启用) - 手动测试与 DNS 服务器的连接
📝 日志记录
默认值:禁用– 不创建任何日志,以保持系统清洁。
启用日志记录:
- 编辑
python/dnsscanner_tui.py - 取消注释该
logger.add()部分 - 日志已保存到
logs/dnsscanner_TIMESTAMP.log
日志级别:
- 调试:详细的 DNS 查询结果和下载进度
- 信息:扫描进度和统计数据
- 警告:非关键问题,请重试
- 错误:严重故障,下载错误
🌍查找CIDR列表
国家/地区 IP 地址范围
IPv4:
- https://www.ipdeny.com/ipblocks/data/aggregated/
IPv6:
- https://www.ipdeny.com/ipv6/ipaddresses/aggregated/
使用示例
# Download Iran IPv4 rangeswget https://www.ipdeny.com/ipblocks/data/aggregated/ir-aggregated.zone -O iran-ipv4.cidrs
# Use in scannerpython dnsscanner_tui.py# Then select iran-ipv4.cidrs in the file browser
🤝 贡献
欢迎贡献代码!请随时提交 pull request 或提出 issue。
开发环境
git clone https://github.com/xullexer/PYDNS-Scanner.gitcd PYDNS-Scanner/pythonpip install -r requirements.txtpython dnsscanner_tui.py
📈 笔记
在各种系统上测试了性能:
- 小规模扫描(1000 个 IP 地址):约 10-30 秒
- 中等规模扫描(50,000 个 IP 地址):约 5-10 分钟
- 大规模扫描(100万+ IP地址):约1-3小时
结果会因网络速度、并发设置和系统资源而异。
🔐 安全注意事项
- 使用加密安全的随机数生成器(
secrets.SystemRandom) - 不会记录任何凭证或敏感数据。
- DNS 查询使用标准的 UDP/TCP 端口 53。
- Slipstream 代理测试是可选的,默认情况下处于禁用状态。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:网络安全民工 网络安全民工 网络安全民工《【渗透工具】——PYDNS扫描器》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论