Thanks to visit codestin.com
Credit goes to github.com

Skip to content

「智能 Host 测速工具」是一款帮你优化网络访问的实用工具。它能自动获取域名的多个 IP 地址,测试各 IP 延迟并排序,一键将最优 IP 写入系统 Hosts 文件,还支持 GitHub 专属 IP 获取、自定义域名管理和可视化操作界面,让你轻松解决网络访问慢的问题。

License

Notifications You must be signed in to change notification settings

KenDvD/SmartHostsTool-github

Repository files navigation

🚀 SmartHostsTool - 智能 Hosts 测速优化工具

SmartHostsTool Logo

高性能 · 智能化 · 跨平台
一款基于现代化 UI 设计的域名 IP 智能测速与 Hosts 优化工具

Python License Platform UI Framework


📖 项目简介

SmartHostsTool 是一款专业的域名 IP 智能测速与 Hosts 文件优化工具,通过 高性能并发测速算法 自动筛选最优 IP 并写入系统 Hosts 文件,有效解决:

  • ✅ GitHub 等网站访问速度慢
  • ✅ DNS 解析不稳定或被污染
  • ✅ 特定域名访问受限或超时
  • ✅ 需要频繁切换 IP 的场景

核心特性

🎨 现代化 UI 设计 - 玻璃拟态设计语言,渐变背景 + 卡片式布局

高性能并发测速 - 基于 ThreadPoolExecutor,支持 TCP/TLS/ICMP 多种测速方式

🔄 多源智能切换 - 支持 7+ 个远程 Hosts 数据源,自动按优先级切换

🛡️ 自动权限提升 - 启动时自动请求管理员权限

🧠 智能 DNS 解析 - 批量域名并发解析,自动去重并聚合 IP

📊 高级测速指标 - 延迟、抖动、稳定性等多维度测速

🔒 TLS/SNI 验证 - HTTPS 证书验证,确保 IP 真正可用

📡 ICMP 回退机制 - TCP 测速失败时自动使用 ICMP ping

💾 自动备份 - 写入 Hosts 前自动备份,支持回滚

定时测速 - 支持定时自动测速并写入最优 IP

🔔 系统托盘 - 最小化到托盘,后台运行不占用任务栏


🖼️ 界面展示

主操作界面

主操作界面

界面架构

  • 顶部 App Bar:标题 + 远程源选择 + 核心操作按钮(刷新/测速/暂停/更多)
  • 左侧配置区:三标签页设计(远程 Hosts / 自定义预设 / 所有解析结果)
  • 右侧结果区:可交互测速结果列表 + 写入操作按钮
  • 底部状态栏:进度条 + 实时状态信息

关于界面

关于界面

功能模块

  • 项目信息卡片:版本号 + 作者信息 + 仓库链接(可点击跳转)
  • 可展开使用说明:详细操作指南,支持滚动查看
  • 头像展示区:圆形裁剪头像,提升视觉亲和力

远程 Hosts 数据源选择

数据源选择

支持的数据源(按优先级):

  1. tinsfoxgithub-hosts.tinsfox.com
  2. GitHub520raw.hellogithub.com
  3. GitHub520 原始raw.githubusercontent.com
  4. GitHub520 CDNfastly.jsdelivr.net / cdn.jsdelivr.net
  5. GitHub Raw 代理ghproxy.com
  6. ineo6 镜像gitlab.com

💡 默认「自动」模式会按上述顺序依次尝试,直到成功获取数据


测速结果展示

测速结果

结果列表特性

  • 斑马纹行样式:提升数据可读性
  • 状态着色:可用(绿色)/ 超时(红色)
  • 多维度指标:延迟、抖动、稳定性全面展示
  • 自动排序:按延迟从低到高排序
  • 批量选择:点击「选择」列复选框批量勾选
  • 实时更新:测速过程中动态插入新结果

🚀 快速开始

方式一:下载可执行文件(推荐)

  1. 访问 Releases 页面
  2. 下载对应系统的可执行文件:
    • Windows: SmartHostsTool-Windows-x64.exe
  3. 双击运行(程序会自动请求管理员权限)

⚠️ Windows Defender 提示:首次运行可能被误报,点击「更多信息」→「仍要运行」即可


方式二:源码运行

1. 环境要求

Python 3.8+

2. 克隆项目

git clone https://github.com/KenDvD/SmartHostsTool-github.git
cd SmartHostsTool-github

3. 安装依赖

pip install -r requirements.txt

核心依赖

- `ttkbootstrap>=1.10.1` - 现代化 UI 框架
- `requests>=2.25.1` - HTTP 请求库
- `Pillow>=8.0.0` - 图像处理(可选)
- `pystray>=0.19.0` - 系统托盘(可选)

4. 启动程序

# Windows(自动提权)
python main.py

# macOS/Linux(需手动提权)
sudo python main.py

📋 详细使用指南

第一步:选择测速目标

选项 A:使用远程 Hosts(GitHub 专属)

  1. 点击左侧 「🌐 远程 Hosts(仅 GitHub)」 标签页
  2. 在「自定义预设」中 选中 github.com
  3. 点击顶部 「🔄 刷新远程 Hosts」 按钮
  4. 等待数据获取完成(通常 2-5 秒)

远程 Hosts 优势

  • ✅ 无需手动解析 DNS
  • ✅ 获取 GitHub 全家桶域名(github.comgithubusercontent.comassets-cdn.github.com 等)
  • ✅ 数据来源可靠(由社区维护并定期更新)

选项 B:自定义域名解析

  1. 点击左侧 「自定义预设」 标签页
  2. 点击 「➕ 添加」 按钮,输入域名(如 google.comtwitter.com
  3. 按住 CtrlShift 多选要测速的域名
  4. 点击 「批量解析」 按钮

自定义解析说明

  • 🔍 程序会通过 DNS 查询获取域名的所有 A 记录
  • ⚡ 使用 20 线程并发解析,速度极快
  • 📊 解析结果会显示在「🔍 所有解析结果」标签页

第二步:开始智能测速

  1. 确认左侧已有 IP 数据(远程 Hosts 或解析结果)
  2. 点击顶部 「▶ 开始测速」 按钮
  3. 观察右侧结果区域实时更新
  4. 如需中断,点击 「⏸ 暂停测速」

测速技术细节

  • 🚀 60 线程并发:同时测试多个 IP,速度快 10 倍
  • 🎯 TCP 80 端口探测:模拟真实 HTTP 访问,精准度高
  • 📏 三次取平均:每个 IP 测试 3 次取平均值,避免网络波动
  • ⏱️ 超时控制:单次测试超时 2 秒自动标记为「超时」
  • 🔄 节流排序:测速过程中每 300ms 刷新一次列表,避免卡顿

第三步:写入 Hosts 文件

方式 A:一键写入最优 IP(推荐)

  1. 测速完成后,点击底部 「一键写入最优 IP」 按钮
  2. 程序会自动为每个域名选择延迟最低的可用 IP
  3. 确认弹窗提示,等待写入完成

方式 B:手动选择 IP 写入

  1. 在右侧结果列表中,点击「选择」列的复选框
  2. 可多选不同域名的 IP 地址
  3. 点击底部 「写入选中到 Hosts」 按钮

适用场景

  • 🎯 需要为不同域名指定特定 IP
  • 🔀 测试不同 IP 的实际访问效果
  • 🛡️ 避免某些 IP 被运营商限速

第四步:刷新 DNS 缓存

写入 Hosts 后,点击顶部 「🧰 更多」「🧹 刷新 DNS」 使配置立即生效。


⚙️ 高级功能

1. 远程数据源切换

点击顶部 「远程源:自动(按优先级)▾」 下拉菜单,可手动指定数据源。

2. 定时测速

点击 「🧰 更多」「⏰ 定时测速设置」,配置定时自动测速:

  • 设置测速间隔(推荐 30-240 分钟)
  • 选择要测速的域名
  • 开启自动写入最优 IP
  • 支持托盘通知

3. 系统托盘

  • 最小化到托盘:关闭窗口时最小化到系统托盘而非退出
  • 快捷操作:右键托盘图标可快速测速、刷新 DNS
  • 后台运行:不占用任务栏空间

4. 测速配置

点击 「🧰 更多」「⚙️ 测速配置」,自定义测速参数:

  • TCP 端口、超时时间、尝试次数
  • TLS/SNI 验证开关
  • ICMP 回退机制
  • 高级指标(抖动、稳定性)

5. 查看 Hosts 文件

点击 「🧰 更多」「📄 查看 Hosts 文件」,程序会自动用系统默认编辑器打开 Hosts 文件。

Hosts 文件路径

  • Windows: C:\Windows\System32\drivers\etc\hosts
  • macOS/Linux: /etc/hosts

写入标记

# === SmartHostsTool Start ===
185.199.108.153 github.com
140.82.113.4 api.github.com
# ... 更多记录
# === SmartHostsTool End ===

💡 程序会在标记区间内管理记录,不会影响其他手动配置


🔧 技术架构

核心技术栈

┌─────────────────────────────────────────────┐
│          SmartHostsTool 架构图              │
├─────────────────────────────────────────────┤
│  UI Layer        │  ttkbootstrap (Vapor)    │
│                  │  Pillow (背景绘制)        │
├──────────────────┼──────────────────────────┤
│  Logic Layer     │  concurrent.futures      │
│                  │  threading / asyncio      │
│                  │  socket (TCP/ICMP 探测)   │
│                  │  ssl (TLS/SNI 验证)       │
├──────────────────┼──────────────────────────┤
│  Network Layer   │  requests + HTTPAdapter  │
│                  │  Retry 策略               │
├──────────────────┼──────────────────────────┤
│  System Layer    │  ctypes (权限提升)        │
│                  │  subprocess (DNS 刷新)    │
│                  │  shutil (备份/回滚)       │
└─────────────────────────────────────────────┘

代码结构

SmartHostsTool-github/
├── main.py                 # 程序入口:GUI 模式和 writer mode(提权写入)
├── main_window.py          # UI 层:主窗口界面、交互逻辑、状态更新
├── about_window.py         # UI 层:关于窗口、使用说明
├── services.py             # 业务逻辑层:远程 Hosts 获取、DNS 解析、测速
├── hosts_file.py           # 系统层:Hosts 文件读写、备份、DNS 刷新
├── config.py               # 配置层:集中管理常量、配置项
├── ui_visuals.py           # UI 视觉层:玻璃拟态背景绘制
├── utils.py                # 工具层:资源路径、权限管理、原子写入
├── tray_icon.py            # 系统托盘:托盘图标、菜单、通知
├── icon.ico                # 程序图标
├── 头像.jpg                # 关于界面头像
├── presets.json            # 自定义预设存储
├── requirements.txt        # 依赖清单
└── README.md               # 项目文档

模块说明

模块 职责 依赖
main.py 程序入口,支持 GUI 模式和 writer mode(提权后写入 Hosts) ttkbootstrap, hosts_file, utils
main_window.py 主窗口 UI 布局、事件处理、调用 services 完成业务逻辑 ttkbootstrap, services, hosts_file, ui_visuals
about_window.py 关于窗口、使用说明展开/收起 ttkbootstrap, ui_visuals, utils
services.py 远程 Hosts 获取、DNS 解析、TCP/TLS/ICMP 测速 requests, socket, ssl, asyncio
hosts_file.py Hosts 文件读写、自动备份、回滚、DNS 刷新 shutil, subprocess, codecs
config.py 集中管理所有配置常量(远程源、超时、线程数等)
ui_visuals.py 玻璃拟态背景绘制(渐变 + 光晕 + 噪点) Pillow(可选)
utils.py 资源路径兼容 PyInstaller、管理员权限管理、原子写入 ctypes, json, tempfile
tray_icon.py 系统托盘图标、菜单、通知 pystray, Pillow(可选)

设计亮点

  1. 分层清晰:UI 层不直接操作系统文件,通过 hosts_file.py 封装
  2. 模块解耦:services.py 不依赖 tkinter/ttkbootstrap,可独立测试
  3. 可配置性:所有配置集中在 config.py,便于后期扩展
  4. 兼容性:utils.py 提供资源路径兼容 PyInstaller
  5. 容错性:Pillow 不可用时自动降级为纯色背景

性能优化亮点

1. 高性能并发测速

# 使用 ThreadPoolExecutor 实现 60 线程并发
self.executor = concurrent.futures.ThreadPoolExecutor(60)
for ip, domain in data:
    self.executor.submit(self._test_ip_delay, ip, domain)

优势

  • ⚡ 60 线程并发,测速速度提升 10-20 倍
  • 🧵 自动管理线程池,避免资源泄漏
  • 🛡️ 超时控制 + 异常处理,保证稳定性

2. 节流刷新机制

技术原理

  • 📊 测速结果暂存在内存,每 300ms 批量更新一次 UI
  • 🎯 减少 Tkinter 主线程负载,保持界面流畅

3. 智能背景绘制

优化效果

  • 🖼️ 绘制速度提升 5-10 倍
  • 💾 内存占用降低 80%

4. 自动权限提升

# Windows 平台自动请求管理员权限
if not is_admin():
    ctypes.windll.shell32.ShellExecuteW(
        None, "runas", sys.executable, __file__, None, 5
    )
    sys.exit(0)

用户体验提升

  • ✅ 无需手动「右键 → 以管理员身份运行」
  • ✅ UAC 提示框自动弹出

❓ 常见问题

Q1:为什么需要管理员权限?

A:Hosts 文件位于系统保护目录(C:\Windows\System32\drivers\etc\),修改需要管理员权限。程序会在启动时自动请求提权。


Q2:测速后显示全部「超时」怎么办?

可能原因

  • 🔥 防火墙拦截 TCP 443 端口探测
  • 🌐 网络环境异常(如使用代理)
  • 🚫 目标 IP 确实不可用

解决方案

  1. 临时关闭防火墙/安全软件重试
  2. 切换不同的远程数据源
  3. 检查本地网络连接状态

Q3:写入 Hosts 后仍然无法访问?

排查步骤

  1. 点击「刷新 DNS」清除缓存
  2. 重启浏览器(清除浏览器 DNS 缓存)
  3. 使用 ping 命令验证解析是否生效:
  4. 检查浏览器是否使用了代理(如 VPN)

Q4:如何恢复原始 Hosts 配置?

方法一:手动编辑

  1. 点击「查看 Hosts 文件」
  2. 删除 # === SmartHostsTool Start ===# === SmartHostsTool End === 之间的内容
  3. 保存并刷新 DNS

方法二:使用备份(如果启用了备份功能)

# Windows
copy C:\Windows\System32\drivers\etc\hosts.bak C:\Windows\System32\drivers\etc\hosts

Q5:支持 IPv6 吗?

IPv4+IPv6双栈测速


🛠️ 开发指南

本地开发环境搭建

# 1. 克隆项目
git clone https://github.com/KenDvD/SmartHostsTool-github.git
cd SmartHostsTool-github

# 2. 创建虚拟环境(推荐)
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 3. 安装开发依赖
pip install -r requirements-dev.txt

# 4. 运行程序
python main.py

代码规范

  • 风格:遵循 PEP 8 规范
  • 注释:关键函数使用文档字符串
  • 类型提示:使用 typing 模块标注参数类型
  • 异常处理:避免裸 except,明确捕获异常类型

打包为可执行文件

使用 PyInstaller 打包:

# 安装 PyInstaller
pip install pyinstaller

# 打包为单文件可执行程序
pyinstaller --onefile --windowed --icon=icon.ico --add-data "presets.json;." --add-data "头像.jpg;." --name "SmartHostsTool" main.py

参数说明

  • --onefile:打包为单个 EXE 文件
  • --windowed:隐藏控制台窗口
  • --icon:设置程序图标
  • --add-data:打包额外资源文件

🤝 贡献指南

欢迎提交 Issue 和 Pull Request!

贡献流程

  1. Fork 本仓库到你的 GitHub 账号
  2. 克隆到本地并创建特性分支:git checkout -b feature/AmazingFeature
  3. 提交更改:git commit -m 'Add some AmazingFeature'
  4. 推送到分支:git push origin feature/AmazingFeature
  5. 提交 Pull Request,描述你的改进内容

贡献方向建议

  • 🐛 修复已知 Bug
  • ✨ 新增实用功能(如 IPv6 支持、Hosts 备份还原)
  • 📝 改进文档与注释
  • 🎨 优化 UI 设计与交互
  • 🌍 国际化支持(多语言界面)

📄 许可证

本项目采用 MIT 许可证 开源。

核心条款

  • ✅ 可自由使用、修改、分发
  • ✅ 可用于商业项目
  • ⚠️ 需保留原作者版权声明
  • ⚠️ 作者不承担任何责任

🙏 致谢

感谢以下开源项目与社区的支持:

  • GitHub520:提供稳定的远程 Hosts 数据源
  • ttkbootstrap:现代化 Tkinter UI 框架
  • Pillow:强大的 Python 图像处理库
  • 所有贡献者:感谢每一位提交代码、反馈问题的开发者

📞 联系方式


⭐ Star History

如果这个项目对你有帮助,欢迎点亮 Star ⭐ 支持一下!

GitHub stars GitHub forks


Made with ❤️ by KenDvD


About

「智能 Host 测速工具」是一款帮你优化网络访问的实用工具。它能自动获取域名的多个 IP 地址,测试各 IP 延迟并排序,一键将最优 IP 写入系统 Hosts 文件,还支持 GitHub 专属 IP 获取、自定义域名管理和可视化操作界面,让你轻松解决网络访问慢的问题。

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages