Skip to content

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

 
 
 

Contributors

Languages