Skip to content

About

一款高性能的DNS解析与hosts更改工具,加速你的上网体验

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DNS Network Tool

Python License Platform Version

🚀 高性能终端DNS解析与网络测试工具

一款专业的无图形界面、基于终端交互的域名解析与网络测试工具,支持智能DNS服务器选择、并行解析、网络性能测试和hosts文件自动生成。

English Version |未来计划|Future plan| 快速开始 | 使用指南 | 常见问题


📋 项目概览

📚 目录

🚀 快速开始

📖 详细指南

🌟 核心功能

🖥️ 终端交互界面

  • 📋 结构化交互流程 - 清晰的文本引导和操作提示
  • 🎮 交互式菜单系统 - 支持键盘导航,操作便捷
  • 🎨 彩色终端输出 - 清晰的信息层级,视觉友好
  • 📊 动态进度显示 - 实时状态更新和进度条
  • ⚡ 响应式设计 - 适配不同终端尺寸!

🌐 域名输入功能

  • 🎯 单个域名输入 - 即时格式验证,错误智能提示
  • 📝 批量域名输入 - 支持.txt文件导入或多行粘贴
  • 🔍 全面格式验证 - 基于RFC 1035规范的严格验证
  • 🛠️ 智能修正建议 - 精确的错误提示和修正方案
  • 🔄 自动去重处理 - 避免重复测试,提高效率

🚀 DNS解析功能

  • 🌍 200+公共DNS服务器 - 智能选择最优服务器

  • ⚙️ 自定义DNS管理 - 添加、删除、优先级排序

  • 🔄 并行解析引擎 - 最多50线程并发处理

  • ⏱️ 详细性能统计 - 解析耗时和成功率记录

  • 🛡️ DNS污染检测 - 识别和规避污染问题

  • ⚡ 自适应超时策略 - 0.8s ~ 5.0s智能调整

  • 🔧 熔断器机制 - 指数退避重试,保障稳定性

📡 网络性能测试

  • 🏓 智能Ping测试 - ICMP socket + 系统命令双重支持
  • 🌊 TCP/UDP速率测试 - 下载+上传双向测试
  • 📈 多维度数据分析 - 延迟、抖动、丢包率、速率
  • ⚡ 并行IP测试 - 最多50线程并发
  • 📊 智能统计分析 - 多次测试取平均值,去除异常值
  • 🏆 Top N最优推荐 - 智能推荐最佳IP地址

📋 结果输出功能

  • 📊 格式化表格展示 - 清晰直观的结果呈现
  • 🔄 三种排序模式 - 延迟优先、速率优先、平衡模式
  • ⭐ 智能推荐标记 - 等级标记,一目了然
  • 📝 hosts文件生成 - 标准格式,一键复制到剪贴板
  • 💾 多格式导出 - 支持.txt和.csv格式
  • 🔍 结果筛选排序 - 灵活的数据筛选功能

🔧 开发者模式

  • 🐛 详细调试日志 - 全面的调试信息输出
  • 📊 性能监控报告 - 实时性能分析和报告
  • ⏱️ 执行时间统计 - 代码段性能分析
  • 🧪 性能基准测试 - 内置基准测试功能

⚡ 高级功能

  • 🏃 性能基准测试 - 全面的性能评估工具
  • 🔄 配置热重载 - 无需重启的配置更新
  • 📝 详细日志记录 - 完整的操作日志
  • 🛡️ 全面异常处理 - 健壮的错误处理机制
  • 📊 动态进度指示 - 实时任务进度展示

🎯 初始化配置功能

  • 🚀 首次运行智能引导 - 自动检测首次运行,提供初始化向导
  • ⚙️ 系统自动性能检测 - 自动测试系统最大并发连接数、线程数、DNS解析线程数
  • 🔧 智能参数优化 - 根据检测结果自动计算最优配置(取最大值的2/3)
  • 🌍 DNS服务器自动筛选 - 依次测试所有DNS服务器,自动移除不可用或响应慢的服务器
  • 💾 配置自动保存 - 优化后的配置自动保存到config.json
  • 🔄 重新初始化支持 - 支持随时重新运行初始化向导或重置初始化记录

1.png

2.png

3.png

4.png


📥 下载工具

🚀 方法一:GitHub 克隆(推荐)

# 克隆源代码仓库
git clone https://github.com/DHA404/DNS_Network_Tool.git
cd DNS_Network_Tool

📦 方法二:手动下载

  1. 🌐 访问项目主页:DNS Network Tool
  2. 📥 点击 "Code" 按钮,选择 "Download ZIP"
  3. 📂 解压下载的压缩包到本地目录

💡 系统要求

要求 最低版本 推荐版本
操作系统 Windows 7 Windows 10/11
Python 3.7+ 3.9+
预留运行内存 40MB 100MB+
磁盘空间 20MB 50MB+

📦 安装依赖

# 安装所有依赖包
pip install -r requirements.txt

📋 依赖说明

包名 版本要求 用途
dnspython >=2.8.0 DNS解析库
requests >=2.32.0 HTTP请求库
colorama >=0.4.6 终端颜色支持
prettytable >=3.10.0 表格格式化输出
psutil >=5.9.0 系统进程监控

🚀 运行程序

# 启动主程序
python main.py

使用工具

🚀 快速开始

步骤 1️⃣:环境准备

确保已安装 Python 3.7 或更高版本:

# 检查 Python 版本
python --version

# 如果未安装,请前往 https://www.python.org/downloads/ 下载安装

步骤 2️⃣:安装依赖

# 进入项目目录
cd DNS_Network_Tool

# 安装所有依赖
pip install -r requirements.txt

步骤 3️⃣:启动工具

# 运行主程序
python main.py

🎯 基础使用场景

🌐 场景一:测试单个域名

# 启动程序后,选择菜单:
# 1. 域名输入并测试
# 2. 单个域名输入
# 3. 输入域名(如:google.com)
# 4. 程序将自动进行 DNS 解析和网络测试

📝 场景二:批量测试多个域名

# 创建域名列表文件 domains.txt,每行一个域名:
google.com
baidu.com
github.com
microsoft.com

# 在程序中选择:
# 1. 域名输入并测试
# 2. 批量输入
# 3. 从文件导入
# 4. 选择 domains.txt

⚙️ 场景三:配置自定义 DNS 服务器

# 在程序主菜单选择:
# 2. 配置 DNS 服务器
# 1. 添加新的 DNS 服务器
# 输入 DNS 服务器 IP 地址(如:114.114.114.114)

基础使用场景

场景一:测试单个域名

# 启动程序后,选择菜单:
# 1. 域名输入并测试
# 2. 单个域名输入
# 3. 输入域名(如:google.com)
# 4. 程序将自动进行 DNS 解析和网络测试

场景二:批量测试多个域名

# 创建域名列表文件 domains.txt,每行一个域名:
google.com
baidu.com
github.com
microsoft.com

# 在程序中选择:
# 1. 域名输入并测试
# 2. 批量输入
# 3. 从文件导入
# 4. 选择 domains.txt

场景三:配置自定义 DNS 服务器

# 在程序主菜单选择:
# 2. 配置 DNS 服务器
# 1. 添加新的 DNS 服务器
# 输入 DNS 服务器 IP 地址(如:114.114.114.114)

详细操作流程

第一步:启动程序

$ python main.py
╔════════════════════════════════════════════════════════════╗
║                    DNS Network Tool                        ║
║              高性能域名解析与网络测试工具                     ║
╚════════════════════════════════════════════════════════════╝

    1. 域名输入并测试
    2. 配置 DNS 服务器
    3. 配置测试参数
    4. 启动/关闭开发者模式
    5. 初始化配置向导
    6. 退出程序

请输入选项编号 [1-6]: _

第二步:选择测试功能

根据需求选择相应功能:

  • 选项 1:进行域名解析和网络测试
  • 选项 2:管理 DNS 服务器列表
  • 选项 3:调整测试参数
  • 选项 4:启用开发者模式获取详细日志
  • 选项 5:运行初始化配置向导
  • 选项 6:安全退出程序

第三步:域名输入方式

支持两种输入方式:

单个域名输入:

  • 输入格式:域名(如:www.example.com)
  • 程序会即时验证域名格式
  • 格式错误时会提示修正建议

批量域名输入:

  • 方式一:逗号分隔(google.com,baidu.com)
  • 方式二:多行粘贴(每行一个域名)
  • 方式三:文件导入(.txt 文件,每行一个域名)

第四步:选择解析模式

综合解析模式:

  • 所有域名同时进行 DNS 解析
  • 统一测试所有获取到的 IP 地址
  • 适用于需要对比不同域名的解析结果

依次解析模式:

  • 逐个解析域名
  • 分别对每个域名进行网络测试
  • 适用于需要详细分析单个域名的场景

第五步:查看测试结果

程序支持多种结果展示和导出方式:

查看 DNS 解析结果:

  • 显示所有解析到的 IP 地址
  • 显示解析耗时和来源 DNS 服务器

查看网络测试结果:

  • Ping 测试结果(延迟、丢包率、抖动)
  • 速率测试结果(下载速度、上传速度)
  • 支持多种排序方式(延迟优先、速率优先、平衡模式)

导出测试结果:

  • 导出为 .txt 格式(表格形式)
  • 导出为 .csv 格式(可导入 Excel)
  • 生成 hosts 文件格式并复制到剪贴板

进阶使用技巧

批量域名测试

常用国内网站

baidu.com taobao.com jd.com douyin.com

常用国外网站

google.com github.com stackoverflow.com

在程序中选择批量输入,然后复制以上域名列表即可批量测试。

自定义测试参数

在程序主菜单选择「配置测试参数」可调整:

参数 推荐值 说明
Ping 测试次数 10-20 平衡准确性和测试时间
Ping 超时时间 1.5 秒 根据网络环境调整
速率测试时长 25 秒 建议 20-30 秒
数据包大小 1024 字节 根据需求调整
并发连接数 12 根据网络带宽调整
DNS 解析超时 5 秒 根据 DNS 服务器响应调整

DNS 服务器管理

程序内置 200+ 公共 DNS 服务器,支持:

  • 查看当前 DNS 服务器列表
  • 添加自定义 DNS 服务器(支持 IPv4/IPv6)
  • 删除不常用的 DNS 服务器
  • 按性能排序 DNS 服务器
  • 设置 DNS 服务器优先级

开发者模式

启用开发者模式可获取:

  • 详细的调试日志
  • 性能监控报告
  • 代码执行时间统计
  • 适合排查问题和性能优化

常见使用问题

Q1:程序无法启动?

A: 请检查以下几点:

  • Python 版本是否 >= 3.7
  • 是否已安装所有依赖(pip install -r requirements.txt)
  • 是否在正确的工作目录(包含 main.py 的目录)
  • 检查是否有端口冲突(部分功能可能占用端口)

Q2:DNS 解析失败?

A: 可能原因及解决方法:

  • 网络连接异常 → 检查网络连接
  • DNS 服务器不可用 → 尝试更换 DNS 服务器
  • 域名格式错误 → 检查域名格式是否正确
  • DNS 解析超时 → 增加 DNS 解析超时时间

Q3:Ping 测试失败?

A: 可能原因:

  • 目标 IP 禁止 Ping(ICMP 被禁用)
  • 防火墙阻止 ICMP 请求
  • 网络连接不稳定

解决方法:

  • 尝试增加 Ping 超时时间
  • 切换到其他目标 IP 进行测试
  • 检查本地防火墙设置

Q4:测试结果不准确?

A: 优化建议:

  • 增加测试次数和时长
  • 在网络负载较低时测试
  • 多次测试取平均值
  • 关闭其他占用带宽的程序

Q5:如何导出 hosts 文件?

A: 测试完成后:

  1. 查看网络测试结果
  2. 选择「生成 hosts 文件」
  3. 程序会自动复制到剪贴板
  4. 直接粘贴到 C:\Windows\System32\drivers\etc\hosts

使用示例

示例 1:测试 Google 服务可用性

# 启动程序
python main.py

# 选择 1. 域名输入并测试
# 选择单个域名输入
# 输入:google.com

# 程序将自动:
# 1. 解析 google.com 的 IP 地址
# 2. 对所有 IP 进行 Ping 测试
# 3. 进行速率测试
# 4. 显示最优 IP 推荐
# 5. 生成 hosts 文件格式

示例 2:批量优化 hosts 文件

google.com
github.com
raw.githubusercontent.com

# 启动程序
python main.py

# 选择批量导入 domains.txt
# 程序测试所有域名
# 生成合并的 hosts 文件
# 一键复制到剪贴板

示例 3:测试自定义 DNS 服务器

# 添加阿里 DNS
# 主菜单选择 2. 配置 DNS 服务器
# 选择添加 DNS 服务器
# 输入:223.5.5.5

# 添加腾讯 DNS
# 输入:119.29.29.29

# 重新测试域名,观察解析速度变化

最佳实践

  1. 定期更新 DNS 服务器列表:删除响应慢的服务器,添加新的高速 DNS
  2. 使用开发者模式排查问题:当测试结果异常时,启用开发者模式查看详细日志
  3. 多次测试取平均值:对于重要场景,建议多次测试后取最优结果
  4. 合理设置测试参数:根据网络环境调整参数,避免测试时间过长
  5. 及时备份 hosts 文件:修改前备份原始 hosts 文件

技术支持

使用指南

主菜单

1. 域名输入并测试
2. 配置 DNS 服务器
3. 配置测试参数
4. 启动/关闭开发者模式
5. 初始化配置向导
6. 退出程序

功能说明

1. 域名输入并测试

选择此选项进入域名测试流程:

  1. 选择输入方式

    • 单个域名输入
    • 批量输入(逗号分隔或隔行粘贴)
  2. 选择解析模式

    • 综合解析:所有域名同时解析,统一测试所有IP
    • 依次解析:逐个解析域名,分别测试
  3. 选择IP模式(仅综合解析模式)

    • 唯一IP模式:所有域名使用同一个最优IP
    • 独立IP模式:每个域名使用自己的最优IP
  4. 查看结果

    • 查看DNS解析结果
    • 查看网络测试结果(Ping/速率)
    • 查看最优IP列表
    • 自动生成hosts文件并复制到剪贴板

2. 配置 DNS 服务器

管理DNS服务器列表:

  • 查看当前DNS服务器列表
  • 添加新的DNS服务器
  • 删除现有DNS服务器
  • DNS服务器性能排序

3. 配置测试参数

调整测试相关参数:

  • Ping测试次数(1-100)
  • Ping超时时间(0.1-10秒)
  • 速率测试时长(1-60秒)
  • 数据包大小(64-8192字节)
  • 并发连接数(1-20)
  • DNS解析线程数(1-50)
  • DNS解析超时时间(1-30秒)

4. 启动/关闭开发者模式

切换开发者模式:

  • 启用:显示详细调试日志
  • 禁用:仅显示基本信息

5. 初始化配置向导

运行初始化配置向导:

  • 首次运行自动提示:程序首次运行时会自动提示进行初始化
  • 系统性能测试:自动检测系统支持的最大并发连接数、线程数、DNS解析线程数
  • DNS服务器筛选:测试并筛选可用的DNS服务器
  • 智能参数优化:根据检测结果自动优化配置参数
  • 手动运行:随时从主菜单选择"初始化配置向导"重新运行

6. 退出程序

安全退出程序,生成性能报告(如已启用开发者模式)。

批量域名测试流程

  1. 选择"域名输入并测试"
  2. 选择"批量输入"
  3. 选择输入方式(文件导入或多行粘贴)
  4. 等待域名验证完成
  5. 选择是否执行网络测试
  6. 查看测试结果
  7. 选择是否导出结果

配置管理

DNS服务器配置

-添加DNS 服务器:输入IP地址添加新服务器

  • 删除DNS服务器:从列表中移除服务器
  • 查看服务器列表:显示所有已配置的DNS服务器
  • 性能排序:按响应时间排序服务器

测试参数配置

参数 范围 说明
ping_count 1-100 Ping测试次数
ping_timeout 0.1-10秒 Ping超时时间
test_duration 1-60秒 速率测试时长
packet_size 64-8192字节 数据包大小
concurrent_connections 1-20 并发连接数
dns_threads 1-50 DNS解析线程数
dns_timeout 1-30秒 DNS解析超时时间

配置文件

程序会在首次运行时创建config.json文件:(默认下载时自带)

{
  "dns_servers": [
    "8.8.8.8",
    "1.1.1.1",
    "9.9.9.9",
    "208.67.222.222",
    "4.2.2.1",
    "1.0.0.1",
    "8.8.4.4",
    "208.67.220.220",
    "84.200.69.80",
    "84.200.70.40"
  ],
  "test_params": {
    "ping_count": 7,
    "ping_timeout": 1.5,
    "test_duration": 25,
    "packet_size": 1024,
    "concurrent_connections": 12,
    "max_threads": 50,
    "dns_threads": 50,
    "dns_timeout": 5,
    "geo_query_enabled": true,
    "geo_query_threads": 50,
    "top_n_ips": 10,
    "speed_test_type": "tcp",
    "enable_ipv6": true,
    "output_format": "txt",
    "auto_save_results": false,
    "enable_download_test": true,
    "enable_upload_test": false,
    "speed_test_method": "both",
    "min_data_threshold": 1048576,
    "min_valid_data": 102400,
    "min_speed": 1.0
  },
  "log_level": "INFO",
  "web_interface": {
    "enabled": false,
    "host": "0.0.0.0",
    "port": 5000
  }
}

配置说明

DNS服务器配置

  • 支持IPv4和IPv6地址
  • 最多支持200+个DNS服务器
  • 建议保留多个备选服务器

测试参数配置

  • ping_count:Ping测试发送的数据包数量

  • ping_timeout:等待Ping响应的超时时间

  • test_duration:速率测试的持续时间(秒)

  • packet_size:测试使用的数据包大小(字节)

  • concurrent_connections:速率测试的并发连接数

  • max_threads:最大线程数

  • dns_threads:DNS解析线程数

  • dns_timeout:DNS解析超时时间

  • top_n_ips:返回最优IP的数量

  • speed_test_type:速率测试类型(tcp/udp/both)

  • enable_ipv6:是否启用IPv6支持

  • output_format:输出格式

  • auto_save_results:是否自动保存结果

  • enable_download_test:是否启用下载测试

  • enable_upload_test:是否启用上传测试

  • speed_test_method:速率测试方法

  • min_data_threshold:最小数据阈值(字节)

  • min_valid_data:最小有效数据(字节)

  • min_speed:最小速率(Mbps)

日志级别

  • DEBUG:详细调试信息
  • INFO:一般信息
  • WARNING:警告信息
  • ERROR:错误信息
  • CRITICAL:严重错误

日志文件

程序会将日志记录到logs目录下:

  • 按日期命名日志文件(如2026-01-06.log)
  • 每个文件最大10MB
  • 自动轮转,保留最近7个日志文件
  • 自动清理7天前的日志文件

技术栈

  • Python 3.7+ - 主要开发语言

  • dnspython - DNS解析库

  • colorama - 终端颜色支持

  • prettytable - 表格格式化输出

  • psutil - 系统进程监控

常见问题

Q1: DNS解析失败怎么办?

A: 请检查以下几点:

  • 网络连接是否正常
  • DNS服务器是否可用
  • 域名格式是否正确
  • 尝试更换其他DNS服务器

Q2: Ping测试失败怎么办?

A: 可能的原因:

  • 目标IP不支持Ping(可能已禁用ICMP)
  • 防火墙阻止了ICMP请求
  • 网络连接不稳定
  • 尝试增加ping_timeout参数

Q3: 速率测试结果不准确怎么办?

A: 建议:

  • 增加test_duration参数值
  • 在网络负载较低时测试
  • 多次测试取平均值
  • 检查是否有其他程序占用带宽

Q5: 如何更新配置文件?

A: 有两种方式:

  1. 手动编辑:直接修改config.json文件
  2. 程序内配置:使用菜单中的"配置测试参数"选项

修改后需要重启程序生效(除部分支持热重载的参数外)。

Q6: 开发者模式有什么作用?

A: 开发者模式提供:

  • 详细的调试日志
  • 性能监控报告
  • 代码执行时间统计
  • 适合排查问题和性能优化

Q7: 如何导出测试结果?

A: 程序支持多种导出方式:

  • TXT格式:表格形式的文本报告
  • CSV格式:逗号分隔值,可导入Excel
  • hosts文件:自动生成并复制到剪贴板

Q8: 如何恢复默认配置?

A: 在配置菜单中选择"恢复默认配置"选项,确认后所有配置将重置为初始值。

架构设计

整体架构

DNS Network Tool采用模块化设计,主要包含以下核心模块:

  • 主控制模块 (main.py):程序入口点,负责协调各模块工作
  • DNS解析模块 (dns_utils.py):实现DNS解析功能,支持多服务器并行查询
  • 网络测试模块 (network_utils.py):提供Ping和速率测试功能
  • 配置管理模块 (config_utils.py):处理配置文件读写和参数管理
  • 日志管理模块 (log_utils.py):统一日志记录和管理
  • 结果处理模块 (result_utils.py):处理和导出测试结果
  • 终端交互模块 (terminal_utils.py):提供彩色终端输出和交互界面
  • 会话管理模块 (session_manager.py):管理HTTP会话和连接池
  • 域名分析模块 (domain_analyzer.py):分析域名和IP连接关系
  • 性能监控模块 (performance_monitor.py):监控程序性能指标

核心设计模式

1. 工厂模式

  • get_session_manager():单例模式管理HTTP会话
  • create_process_manager():创建进程管理器实例

2. 策略模式

  • 重试策略:指数退避重试机制
  • 超时策略:自适应超时管理器
  • 排序策略:多种结果排序模式(延迟优先、速率优先、平衡模式)

3. 观察者模式

  • 事件系统:支持插件钩子机制
  • 日志系统:多级别日志输出

DNS解析实现原理

智能DNS服务器选择

  1. 性能监控:实时监控各DNS服务器响应时间
  2. 熔断机制:对故障服务器实施熔断保护
  3. 负载均衡:根据服务器性能动态分配查询负载
  4. 故障转移:自动切换到备用DNS服务器

并行解析策略

  • 使用concurrent.futures.ThreadPoolExecutor实现多线程并行解析
  • 根据系统负载动态调整线程池大小
  • 支持A记录和AAAA记录同时查询

自适应超时机制

  • 根据历史响应时间动态调整超时阈值
  • 分为5个等级:very_fast(0.8s)、fast(1.2s)、normal(2.0s)、slow(3.5s)、very_slow(5.0s)

网络测试实现原理

Ping测试

  • 优先使用ICMP raw socket(需要管理员权限)
  • 降级到系统ping命令(跨平台兼容)
  • 支持IPv4和IPv6双栈测试

速率测试

  • TCP/UDP协议支持
  • 多服务器并行测试
  • 自定义数据包大小和测试时长
  • 实时速率计算和统计

数据处理流程

  1. 输入验证:域名格式验证和预处理
  2. DNS解析:多服务器并行解析获取IP列表
  3. IP去重:合并相同IP,统计来源服务器
  4. 网络测试:对每个IP进行Ping和速率测试
  5. 结果排序:根据选择的策略排序结果
  6. 输出生成:生成表格、hosts文件或导出文件

性能优化

并发处理机制

线程池管理

  • 动态调整:根据CPU核心数和系统负载动态调整线程池大小
  • 负载均衡:根据系统当前负载计算最优线程数
  • 资源监控:实时监控系统资源使用情况,避免过载

异步I/O处理

  • 非阻塞操作:使用非阻塞I/O操作提高并发性能
  • 事件驱动:基于事件的异步处理机制
  • 连接复用:HTTP和TCP连接池复用,减少连接建立开销

批量处理优化

  • 域名批量解析:同时向多个DNS服务器发送解析请求
  • IP批量测试:并行对多个IP进行网络测试
  • 结果聚合:高效聚合和处理批量测试结果

内存优化策略

对象复用

  • 对象池模式:复用频繁创建的网络连接对象
  • 连接池管理:HTTP和TCP连接复用,减少内存分配
  • 缓冲区复用:预分配固定大小缓冲区,避免频繁分配

内存管理

  • 及时释放:确保资源及时释放,避免内存泄漏
  • 垃圾回收优化:合理管理对象生命周期,优化垃圾回收
  • 缓存策略:智能缓存机制,平衡内存使用和性能

算法优化

排序算法

  • 快速排序:使用优化的排序算法处理大量测试结果
  • 多维度排序:支持按延迟、速率、稳定性等多维度排序
  • 部分排序:仅对Top N结果进行完整排序,提高效率

查找算法

  • 哈希查找:使用字典和集合进行O(1)时间复杂度的快速查找
  • 索引优化:为常用查询建立索引,提高查找效率
  • 去重算法:高效的IP去重和合并算法

数据结构优化

  • 字典优化:使用高效的字典结构存储DNS解析结果
  • 列表优化:优化列表操作,减少不必要的复制和移动
  • 集合操作:使用集合进行高效的去重和交集操作

网络性能优化

连接优化

  • TCP参数调优:优化TCP连接参数,提高传输效率
  • 连接预热:预建立常用连接,减少连接建立时间
  • Keep-Alive:使用长连接减少连接建立开销

协议优化

  • HTTP/1.1优化:使用连接复用和管道化请求
  • 请求合并:合并相似请求,减少网络往返次数
  • 压缩传输:对大数据量使用压缩传输

系统级优化

资源调度

  • CPU亲和性:优化线程与CPU核心的绑定
  • I/O调度:优化磁盘I/O和网络I/O调度
  • 内存分配:优化内存分配策略,减少碎片

性能监控

  • 实时监控:实时监控系统性能指标
  • 性能分析:内置性能分析工具,识别性能瓶颈
  • 调优建议:根据系统配置提供性能调优建议

错误处理与异常管理

异常处理架构

统一异常处理

  • 自定义异常类:定义了多个专用异常类,如DNSResolveException、NetworkTestException等
  • 异常处理器:统一的ExceptionHandler类处理所有异常
  • 错误分类:根据错误类型进行分类处理和记录

分层异常处理

  • 模块级处理:各模块内部处理特定异常
  • 服务级处理:服务层统一处理业务异常
  • 应用级处理:应用层处理未捕获异常

重试机制

指数退避算法

  • 动态重试:根据错误类型和重试次数动态调整重试间隔
  • 最大重试次数:可配置的最大重试次数限制
  • 退避因子:基于2的指数退避,避免服务器过载

重试策略

  • 网络错误重试:对网络超时、连接失败等错误进行重试
  • DNS错误重试:对DNS解析超时等临时性错误进行重试
  • 智能判断:根据错误类型智能判断是否需要重试

熔断器模式

熔断机制

  • 故障计数:统计服务器连续故障次数
  • 熔断阈值:达到阈值后自动熔断服务器
  • 半开状态:定时尝试恢复已熔断的服务器

熔断策略

  • 快速失败:对已熔断服务器快速返回失败
  • 自动恢复:定时尝试恢复,避免永久性故障
  • 健康检查:对恢复的服务器进行健康检查

容错设计

降级策略

  • 备用方法:主方法失败时自动切换到备用方法
  • 功能降级:在部分功能失效时保持核心功能可用
  • 数据降级:使用缓存数据或默认数据替代

限流机制

  • 请求限流:限制对单个服务器的请求频率
  • 并发控制:控制并发连接数,防止服务器过载
  • 队列管理:使用队列管理请求,避免突发流量

错误日志管理

日志分级

  • DEBUG:详细调试信息,用于开发和调试
  • INFO:一般信息,记录程序正常运行状态
  • WARNING:警告信息,记录潜在问题
  • ERROR:错误信息,记录错误但不影响程序运行
  • CRITICAL:严重错误,记录导致程序异常的信息

日志内容

  • 时间戳:精确到毫秒的时间记录
  • 模块信息:记录发生错误的模块和函数
  • 上下文信息:包含错误发生时的上下文信息
  • 堆栈跟踪:完整的错误堆栈信息

常见异常类型及处理

网络相关异常

  • ConnectionError:网络连接错误,尝试重连或切换服务器
  • TimeoutError:网络超时,增加超时时间或重试
  • ConnectionResetError:连接被重置,重新建立连接
  • ConnectionRefusedError:连接被拒绝,检查服务器状态

DNS相关异常

  • DNS解析失败:尝试其他DNS服务器或使用备用方法
  • DNS服务器无响应:标记服务器为故障状态
  • 域名格式错误:验证域名格式并提示用户修正

系统相关异常

  • 权限不足:提示用户以管理员权限运行
  • 资源不足:降低并发数或释放部分资源
  • 系统调用失败:使用备用方法或降级处理

错误恢复机制

自动恢复

  • 连接重连:自动尝试重新建立断开的连接
  • 服务重启:对临时性故障自动重启相关服务
  • 配置重载:在配置错误时自动重载正确配置

手动恢复

  • 状态重置:提供手动重置功能
  • 服务重启:支持手动重启特定服务
  • 配置重置:支持重置到默认配置

监控与告警

性能监控

  • 响应时间监控:监控各服务器响应时间
  • 成功率统计:统计各功能的成功率
  • 错误率监控:监控错误发生频率

告警机制

  • 阈值告警:超过阈值时触发告警
  • 趋势告警:性能下降趋势告警
  • 故障告警:服务不可用时立即告警

高级配置与使用技巧

性能调优参数

  • 并发连接数:根据网络带宽和目标服务器性能调整
  • DNS线程数:根据DNS服务器数量和响应速度调整
  • 测试时长:平衡测试准确性和执行时间

批量处理技巧

  • 域名列表格式:支持多种格式的域名输入
  • 结果筛选:根据延迟、速率等指标筛选最优IP
  • 自动化脚本:结合shell脚本实现自动化测试

高级功能使用

  • 开发者模式:启用详细日志和性能监控
  • 自定义DNS服务器:添加私有或高性能DNS服务器
  • IPv6优先:配置IPv6优先的解析策略

安全注意事项

权限要求

  • ICMP Ping:需要管理员权限(Windows)或root权限(Linux/MacOS)
  • Raw Socket:需要特殊权限进行网络操作

数据安全

  • 隐私保护:不收集或上传用户数据
  • 本地处理:所有数据处理在本地完成
  • 日志安全:敏感信息不会记录到日志中

网络安全

  • 合理使用:避免对目标服务器造成过大压力
  • 频率限制:内置限流机制防止滥用
  • 合规测试:仅对有权限的域名和IP进行测试

常见问题

Q1: DNS解析失败怎么办?

A: 请检查以下几点:

  • 网络连接是否正常
  • DNS服务器是否可用
  • 域名格式是否正确
  • 尝试更换其他DNS服务器

Q2: Ping测试失败怎么办?

A: 可能的原因:

  • 目标IP不支持Ping(可能已禁用ICMP)
  • 防火墙阻止了ICMP请求
  • 网络连接不稳定
  • 尝试增加ping_timeout参数

Q3: 速率测试结果不准确怎么办?

A: 建议:

  • 增加test_duration参数值
  • 在网络负载较低时测试
  • 多次测试取平均值
  • 检查是否有其他程序占用带宽

Q5: 如何更新配置文件?

A: 有两种方式:

  1. 手动编辑:直接修改config.json文件
  2. 程序内配置:使用菜单中的"配置测试参数"选项

修改后需要重启程序生效(除部分支持热重载的参数外)。

Q6: 开发者模式有什么作用?

A: 开发者模式提供:

  • 详细的调试日志
  • 性能监控报告
  • 代码执行时间统计
  • 适合排查问题和性能优化

Q7: 如何导出测试结果?

A: 程序支持多种导出方式:

  • TXT格式:表格形式的文本报告
  • CSV格式:逗号分隔值,可导入Excel
  • hosts文件:自动生成并复制到剪贴板

Q8: 如何恢复默认配置?

A: 在配置菜单中选择"恢复默认配置"选项,确认后所有配置将重置为初始值。

Q9: 如何提高测试准确性?

A: 建议配置:

  • 增加ping_count(如20-50次)
  • 延长test_duration(如30-60秒)
  • 在网络空闲时段测试
  • 多次测试取平均值

Q10: 如何处理大量域名?

A: 批量处理建议:

  • 分批处理域名(每次10-50个)
  • 适当降低并发参数避免系统过载
  • 使用文件导入方式输入域名
  • 启用自动保存结果功能

技术栈

  • Python 3.7+ - 主要开发语言

  • dnspython - DNS解析库

  • colorama - 终端颜色支持

  • prettytable - 表格格式化输出

  • psutil - 系统进程监控

许可证

MIT License

贡献指南

开发环境设置

  1. 克隆项目到本地
  2. 创建虚拟环境:python -m venv .venv
  3. 激活虚拟环境:source .venv/bin/activate (Linux/macOS) 或 .venv\Scripts\activate (Windows)
  4. 安装依赖:pip install -r requirements.txt

代码规范

  • 遵循PEP 8代码风格
  • 使用类型提示增强代码可读性
  • 编写单元测试确保代码质量
  • 提交前运行代码检查

贡献流程

  1. Fork项目
  2. 创建功能分支
  3. 提交更改
  4. 发起Pull Request

作者

DNS Network Tool - 高性能域名解析与网络测试工具

About

一款高性能的DNS解析与hosts更改工具,加速你的上网体验

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages