Skip to content

这是一个基于Python的GitHub hosts自动更新服务,能够每小时自动检查GitHub hosts是否发生变化,并及时更新本地hosts文件,无须梯子解决GitHub访问问题。

License

Notifications You must be signed in to change notification settings

lawcontinue/fetch-github-pyvs

Repository files navigation

GitHub Hosts 自动更新服务

这是一个基于Python的GitHub hosts自动更新服务,能够每小时自动检查GitHub hosts是否发生变化,并及时更新本地hosts文件,解决GitHub访问问题。

功能特性

  • 自动检测变化:智能比对本地和远程hosts内容,仅在有变化时才更新
  • 定时调度:使用APScheduler每小时自动检查一次
  • 权限管理:自动请求管理员权限,无需手动操作
  • 详细日志:记录每次检查时间、更新状态、错误信息等
  • 安全备份:更新前自动备份原hosts文件
  • 错误恢复:更新失败时自动从备份恢复
  • 后台运行:作为持续服务运行,无需人工干预

项目结构

fetch_github_hosts_py/
├── main.py              # 主程序入口,包含调度器和管理员权限请求
├── hosts_updater.py     # Hosts更新核心逻辑
├── config.py            # 配置文件(远程URL、hosts路径等)
├── requirements.txt     # Python依赖包
├── logs/                # 日志目录(自动创建)
│   └── github_hosts_updater.log  # 日志文件
└── README.md            # 使用说明文档

安装步骤

1. 环境要求

  • Python 3.7 或更高版本
  • Windows 操作系统
  • 管理员权限(程序会自动请求)

2. 安装依赖

# 进入项目目录
cd fetch_github_hosts_py

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

3. 运行服务

# 直接运行(程序会自动请求管理员权限)
python main.py

或者:

# 以管理员身份运行
# 右键点击命令提示符 -> 以管理员身份运行
python main.py

使用说明

启动服务

  1. 打开命令提示符或PowerShell
  2. 进入项目目录:cd fetch_github_hosts_py
  3. 运行程序:python main.py
  4. 程序会自动请求管理员权限(如需要)
  5. 服务启动后会立即执行一次检查
  6. 之后每小时自动检查一次

停止服务

Ctrl+C 停止服务

查看日志

日志文件位置:logs/github_hosts_updater.log

日志内容包括:

  • 每次检查的时间戳
  • 是否检测到hosts变化
  • 更新成功/失败状态
  • 详细的错误信息

配置说明

可以通过修改 config.py 文件来调整配置:

# 检查间隔(小时)
CHECK_INTERVAL_HOURS = 1

# 远程hosts URL
REMOTE_HOSTS_URL = "https://raw.hellogithub.com/hosts"

# hosts文件路径
HOSTS_FILE_PATH = r"C:\Windows\System32\drivers\etc\hosts"

# 日志配置
LOG_MAX_BYTES = 10 * 1024 * 1024  # 10MB
LOG_BACKUP_COUNT = 5  # 保留5个备份文件

工作原理

  1. 获取远程内容:从 https://raw.hellogithub.com/hosts 获取最新的hosts配置
  2. 读取本地文件:读取本地hosts文件,提取GitHub520部分
  3. 内容比对:标准化处理后比对本地和远程内容
  4. 智能更新:仅在检测到变化时才更新hosts文件
  5. 安全备份:更新前自动备份,失败时自动恢复

注意事项

网络要求

  • 需要能够访问 https://raw.hellogithub.com/hosts
  • 如果网络不稳定,程序会自动重试3次

权限要求

  • 需要管理员权限来修改hosts文件
  • 程序会自动请求权限,无需手动操作

防火墙设置

  • 如果防火墙阻止程序运行,请添加例外规则
  • 确保程序能够访问网络

杀毒软件

  • 某些杀毒软件可能会误报,请添加信任
  • 程序只修改hosts文件,不会执行其他危险操作

故障排除

1. 权限问题

错误:无法以管理员权限启动程序
解决:右键点击命令提示符,选择"以管理员身份运行"

2. 网络问题

错误:获取远程hosts内容失败
解决:检查网络连接,确保能访问GitHub相关网站

3. 文件权限问题

错误:更新hosts文件失败
解决:确保程序以管理员权限运行,检查hosts文件是否被其他程序占用

4. 依赖包问题

错误:ModuleNotFoundError: No module named 'apscheduler'
解决:运行 pip install -r requirements.txt 安装依赖

日志示例

2025-10-22 10:00:00 - INFO - GitHub Hosts 自动更新服务启动
2025-10-22 10:00:00 - INFO - 检查间隔: 1 小时
2025-10-22 10:00:00 - INFO - 执行启动时检查
2025-10-22 10:00:00 - INFO - 开始检查GitHub hosts更新
2025-10-22 10:00:01 - INFO - 成功获取远程hosts内容,长度: 1234 字符
2025-10-22 10:00:01 - INFO - 检测到hosts内容变化,需要更新
2025-10-22 10:00:01 - INFO - Hosts文件更新成功
2025-10-22 10:00:01 - INFO - 检查完成: hosts文件更新成功

技术实现

  • 调度器:APScheduler BlockingScheduler
  • 网络请求:requests库,支持重试机制
  • 权限管理:ctypes调用Windows API
  • 日志系统:Python logging模块,支持日志轮转
  • 文件操作:pathlib和正则表达式处理

许可证

本项目基于MIT许可证开源。

贡献

欢迎提交Issue和Pull Request来改进这个项目!

About

这是一个基于Python的GitHub hosts自动更新服务,能够每小时自动检查GitHub hosts是否发生变化,并及时更新本地hosts文件,无须梯子解决GitHub访问问题。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages