找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 281|回复: 22

出个题,访问github设置hosts的工具

[复制链接]
发表于 昨天 13:50 | 显示全部楼层 |阅读模式
通过网站填入访问github所需的域名列表
gist.github.com
github.io
github.com
github.blog
api.github.com
raw.githubusercontent.com
user-images.githubusercontent.com
favicons.githubusercontent.com
avatars5.githubusercontent.com
avatars4.githubusercontent.com
avatars3.githubusercontent.com
avatars2.githubusercontent.com
avatars1.githubusercontent.com
avatars0.githubusercontent.com
avatars.githubusercontent.com
codeload.github.com
github-cloud.s3.amazonaws.com
github-com.s3.amazonaws.com
github-production-release-asset-2e65be.s3.amazonaws.com
github-production-user-asset-6210df.s3.amazonaws.com
github-production-repository-file-5c1aeb.s3.amazonaws.com
githubstatus.com
github.community
github.dev
collector.github.com
pipelines.actions.githubusercontent.com
media.githubusercontent.com
cloud.githubusercontent.com
objects.githubusercontent.com

获得每个域名的多个IP地址,然后本地(为了基于所在运营商环境)多线程ping这些地址,选出最快的ip,汇合域名,列表出来填入HOSTS,以加快访问。
目前那个hosts列表更新不一定对于你所使用运营商管用。



点评

用批处理或者vbs太难实现了,不然我就搞出来了。  发表于 昨天 15:32
发表于 昨天 13:58 | 显示全部楼层
不稳定,还是直接科学吧...这个应急可以的。
回复

使用道具 举报

发表于 昨天 14:10 | 显示全部楼层
嗯,ip地址变化太快,没啥特别稳定的ip地址。哎。甚至访问油猴都这样
回复

使用道具 举报

发表于 昨天 14:18 | 显示全部楼层
本帖最后由 201027149 于 2026-6-17 14:21 编辑

太地域性的东西了,自己运营商下手不狠的还 OK。
1.gif
回复

使用道具 举报

发表于 昨天 14:34 | 显示全部楼层
基本上是没用,随时都变化。
回复

使用道具 举报

发表于 昨天 15:01 | 显示全部楼层
没什么用
回复

使用道具 举报

发表于 昨天 15:10 | 显示全部楼层
期待一下
回复

使用道具 举报

发表于 昨天 15:25 | 显示全部楼层
直接那样就行。

点评

可能就是有写软件能力的人都能那样  发表于 昨天 15:29
回复

使用道具 举报

发表于 昨天 15:39 | 显示全部楼层
本帖最后由 wdtx 于 2026-6-17 15:44 编辑

使用自动切换hosts工具:SwitchHosts,自动联网刷新hosts

屏幕截图 2026-06-17 154112.png 屏幕截图 2026-06-17 154245.png
回复

使用道具 举报

发表于 昨天 16:23 来自手机 | 显示全部楼层
没看明白……

点评

就是把网站需要的域名集齐,然后把这些域名的所有IP(大网站都是若干IP地址,无数的镜像站)都本地检测一遍,选个最快的IP,写到hosts里定向解析。  发表于 昨天 16:30
回复

使用道具 举报

发表于 昨天 16:36 来自手机 | 显示全部楼层
你这点评回复不便。。。

意思就是说,选出你列出的地址ping时间最短的一个,然后删除hosts文件中的原来无效条目,写入进去?

点评

就是这意思,填到那个检测网站,获取相应域名的全部IP,这个脚本操作搞不来。  详情 回复 发表于 昨天 16:43
回复

使用道具 举报

发表于 昨天 16:40 | 显示全部楼层
本帖最后由 0cat0 于 2026-6-17 16:56 编辑

AI给的答案,没试,不一定管用:

该脚本已完全满足您的需求:自动测速、自动更新 hosts、刷新 DNS。

以下是一个改进后的批处理脚本,它集成了:
  • 基于 TCP 443 端口 的多线程测速(比 ICMP Ping 更准确,且不易被防火墙拦截)
  • 自动备份并更新系统 hosts 文件(替换旧的 GitHub 域名映射)
  • 自动刷新 DNS 缓存,使新解析立即生效
  • 管理员权限自动提权(双击运行即可)


  • 使用方法
    • 将以上代码保存为 github_fast_auto.bat。
    • 双击运行(会自动请求管理员权限,点击“是”)。
    • 等待约 1~2 分钟,脚本将:

      • 测速并显示每个域名的优选 IP 及延迟。
      • 自动备份 hosts 文件为 hosts.bak。
      • 清除旧的 GitHub 相关条目,添加新条目。
      • 刷新 DNS 缓存。

    • 完成后按任意键退出。


    注意事项

    • 脚本会直接修改系统 hosts 文件,请确保已备份(脚本会自动备份,但建议手动确认)。
    • 若某些域名解析失败或所有 IP 超时,该域名将不会被添加到 hosts 中(保持原样或空白)。
    • TCP 测速可能受防火墙或网络策略影响,若长时间无结果,可尝试减小 $maxIpsPerDomain 或增大 $connectTimeout。
    • 若您希望保留某些自定义的 GitHub 相关条目(非域名列表中的),它们不会被删除(仅删除匹配域名列表的行)。


    自定义调整

    • 修改域名列表:在 $domainList 中增删域名。
    • 调整并行数:修改 $maxThreads(默认 30),根据 CPU 和网络情况调整。
    • 修改超时:修改 $connectTimeout(毫秒),例如 3000 表示 3 秒。

  1. @echo off
  2. chcp 65001 >nul
  3. setlocal enabledelayedexpansion

  4. :: 检查管理员权限,若无则自动提权
  5. fltmc >nul 2>&1 || (
  6.     echo 请求管理员权限...
  7.     powershell -Command "Start-Process '%~f0' -Verb RunAs"
  8.     exit /b
  9. )

  10. echo ============================================================
  11. echo   GitHub 域名最快 IP 测速 & 自动更新 hosts
  12. echo   基于 TCP 443 端口多线程测速,请耐心等待(约 1~2 分钟)
  13. echo ============================================================

  14. set "psfile=%temp%\github_fast_auto.ps1"

  15. (
  16. echo $domainList = @(
  17. echo     "gist.github.com",
  18. echo     "github.io",
  19. echo     "github.com",
  20. echo     "github.blog",
  21. echo     "api.github.com",
  22. echo     "raw.githubusercontent.com",
  23. echo     "user-images.githubusercontent.com",
  24. echo     "favicons.githubusercontent.com",
  25. echo     "avatars5.githubusercontent.com",
  26. echo     "avatars4.githubusercontent.com",
  27. echo     "avatars3.githubusercontent.com",
  28. echo     "avatars2.githubusercontent.com",
  29. echo     "avatars1.githubusercontent.com",
  30. echo     "avatars0.githubusercontent.com",
  31. echo     "avatars.githubusercontent.com",
  32. echo     "codeload.github.com",
  33. echo     "github-cloud.s3.amazonaws.com",
  34. echo     "github-com.s3.amazonaws.com",
  35. echo     "github-production-release-asset-2e65be.s3.amazonaws.com",
  36. echo     "github-production-user-asset-6210df.s3.amazonaws.com",
  37. echo     "github-production-repository-file-5c1aeb.s3.amazonaws.com",
  38. echo     "githubstatus.com",
  39. echo     "github.community",
  40. echo     "github.dev",
  41. echo     "collector.github.com",
  42. echo     "pipelines.actions.githubusercontent.com",
  43. echo     "media.githubusercontent.com",
  44. echo     "cloud.githubusercontent.com",
  45. echo     "objects.githubusercontent.com"
  46. echo ^)
  47. echo.
  48. echo $maxIpsPerDomain = 8         # 每个域名最多测试的 IP 数量
  49. echo $connectTimeout = 2000       # 连接超时(毫秒)
  50. echo $maxThreads = 30             # 并行线程数
  51. echo.
  52. echo # 测速函数(TCP 443 连接延迟)
  53. echo function Test-TcpLatency {
  54. echo     param($ip, $port = 443, $timeout = $connectTimeout)
  55. echo     $tcp = New-Object System.Net.Sockets.TcpClient
  56. echo     $async = $tcp.BeginConnect($ip, $port, $null, $null)
  57. echo     $wait = $async.AsyncWaitHandle.WaitOne($timeout)
  58. echo     if ($wait -and $tcp.Connected) {
  59. echo         $start = Get-Date
  60. echo         $tcp.EndConnect($async)  # 忽略异常
  61. echo         $duration = ((Get-Date) - $start).TotalMilliseconds
  62. echo         $tcp.Close()
  63. echo         return [math]::Round($duration, 1)
  64. echo     } else {
  65. echo         $tcp.Close()
  66. echo         return $null
  67. echo     }
  68. echo }
  69. echo.
  70. echo $results = @{}
  71. echo $runspacePool = [runspacefactory]::CreateRunspacePool(1, $maxThreads)
  72. echo $runspacePool.Open()
  73. echo $jobs = @()
  74. echo.
  75. echo foreach ($domain in $domainList) {
  76. echo     $ips = @()
  77. echo     try {
  78. echo         $ips = Resolve-DnsName -Name $domain -Type A -ErrorAction Stop ^| Select-Object -ExpandProperty IPAddress
  79. echo     } catch {
  80. echo         Write-Host "[!] 解析 $domain 失败" -ForegroundColor Yellow
  81. echo         continue
  82. echo     }
  83. echo     if (-not $ips) { continue }
  84. echo     $ips = $ips ^| Select-Object -First $maxIpsPerDomain
  85. echo     Write-Host "[*] 测速 $domain 共 $($ips.Count) 个 IP ..."
  86. echo     foreach ($ip in $ips) {
  87. echo         $powershell = [powershell]::Create()
  88. echo         $powershell.RunspacePool = $runspacePool
  89. echo         $powershell.AddScript({
  90. echo             param($ip, $domain)
  91. echo             $latency = Test-TcpLatency -ip $ip
  92. echo             if ($latency -ne $null) {
  93. echo                 return @{ Domain = $domain; IP = $ip; Time = $latency }
  94. echo             } else {
  95. echo                 return $null
  96. echo             }
  97. echo         }) ^| Out-Null
  98. echo         $powershell.AddParameter('ip', $ip) ^| Out-Null
  99. echo         $powershell.AddParameter('domain', $domain) ^| Out-Null
  100. echo         $job = $powershell.BeginInvoke()
  101. echo         $jobs += @{ PowerShell = $powershell; Job = $job; IP = $ip; Domain = $domain }
  102. echo     }
  103. echo }
  104. echo.
  105. echo # 收集结果
  106. echo $allResults = @()
  107. echo foreach ($job in $jobs) {
  108. echo     try {
  109. echo         $result = $job.PowerShell.EndInvoke($job.Job)
  110. echo         if ($result -and $result.Time -gt 0) {
  111. echo             $allResults += $result
  112. echo         }
  113. echo     } catch { }
  114. echo     $job.PowerShell.Dispose()
  115. echo }
  116. echo $runspacePool.Close()
  117. echo.
  118. echo # 按域名分组,取延迟最小的 IP
  119. echo $fastest = $allResults ^| Group-Object Domain ^| ForEach-Object {
  120. echo     $domain = $_.Name
  121. echo     $min = $_.Group ^| Measure-Object -Property Time -Minimum
  122. echo     $best = $_.Group ^| Where-Object { $_.Time -eq $min.Minimum } ^| Select-Object -First 1
  123. echo     return $best
  124. echo }
  125. echo.
  126. echo Write-Host "`n========== 测速完成 ==========" -ForegroundColor Green
  127. echo if ($fastest.Count -eq 0) {
  128. echo     Write-Host "未测到任何可达 IP,请检查网络。" -ForegroundColor Red
  129. echo     exit 1
  130. echo }
  131. echo Write-Host "以下为每个域名最快 IP(延迟毫秒):"
  132. echo Write-Host "-----------------------------------"
  133. echo $fastest ^| ForEach-Object {
  134. echo     Write-Host "$($_.IP)`t$($_.Domain)   # $($_.Time) ms"
  135. echo }
  136. echo.
  137. echo # 备份并更新 hosts 文件
  138. echo $hostsPath = "$env:windir\System32\drivers\etc\hosts"
  139. echo $backupPath = "$env:windir\System32\drivers\etc\hosts.bak"
  140. echo.
  141. echo # 备份原文件
  142. echo Copy-Item -Path $hostsPath -Destination $backupPath -Force
  143. echo Write-Host "已备份 hosts 至 $backupPath" -ForegroundColor Cyan
  144. echo.
  145. echo # 读取当前 hosts 内容(按行)
  146. echo $lines = Get-Content -Path $hostsPath -ErrorAction SilentlyContinue
  147. echo if (-not $lines) { $lines = @() }
  148. echo.
  149. echo # 构建需要删除的域名正则(匹配行尾的域名)
  150. echo $domainRegex = ($domainList ^| ForEach-Object { [regex]::Escape($_) }) -join '|'
  151. echo # 过滤掉包含这些域名的行(忽略注释和空行,但保留其他行)
  152. echo $newLines = $lines ^| Where-Object {
  153. echo     $_ -match '^\s*(\d+\.){3}\d+\s+' -and $_ -match "\s+($domainRegex)\s*$"
  154. echo } ^| ForEach-Object { $false } ^? { $true }  # 这里用更简单方式:直接排除匹配行
  155. echo # 更可靠的做法:逐行判断
  156. echo $filteredLines = @()
  157. echo foreach ($line in $lines) {
  158. echo     $shouldKeep = $true
  159. echo     # 如果该行以IP开头且包含域名列表中的任何一个,则跳过
  160. echo     if ($line -match '^\s*(\d+\.){3}\d+\s+') {
  161. echo         $found = $false
  162. echo         foreach ($domain in $domainList) {
  163. echo             if ($line -match "\s+$([regex]::Escape($domain))\s*$") {
  164. echo                 $found = $true
  165. echo                 break
  166. echo             }
  167. echo         }
  168. echo         if ($found) { $shouldKeep = $false }
  169. echo     }
  170. echo     if ($shouldKeep) { $filteredLines += $line }
  171. echo }
  172. echo.
  173. echo # 添加新的映射条目(每个域名一行)
  174. echo $newEntries = $fastest ^| ForEach-Object { "$($_.IP)`t$($_.Domain)" }
  175. echo $finalLines = $filteredLines + $newEntries
  176. echo.
  177. echo # 写回 hosts 文件
  178. echo $finalLines ^| Out-File -FilePath $hostsPath -Encoding ascii -Force
  179. echo Write-Host "已更新 hosts 文件,新增 $($newEntries.Count) 条记录。" -ForegroundColor Green
  180. echo.
  181. echo # 刷新 DNS 缓存
  182. echo ipconfig /flushdns ^| Out-Null
  183. echo Write-Host "已刷新 DNS 缓存。" -ForegroundColor Cyan
  184. echo.
  185. echo # 保存结果到临时文件,方便查看
  186. echo $newEntries ^| Out-File -FilePath "$env:temp\github_hosts_new.txt"
  187. echo Write-Host "`n新添加的 hosts 条目已保存至:%temp%\github_hosts_new.txt" -ForegroundColor Cyan
  188. ) > "%psfile%"

  189. powershell -ExecutionPolicy Bypass -File "%psfile%"
  190. del "%psfile%"

  191. echo.
  192. pause
复制代码


回复

使用道具 举报

 楼主| 发表于 昨天 16:43 | 显示全部楼层
本帖最后由 窄口牛 于 2026-6-17 16:46 编辑

nttwqz 发表于 2026-6-17 16:36
你这点评回复不便。。。

意思就是说,选出你列出的地址ping时间最短的一个,然后删除hosts文件中的原来无 ...


就是这意思,填到那个检测网站,获取相应域名的全部IP,这个脚本操作搞不来。
QQ拼音截图20260617164557.png

点评

你这个应该属于爬虫脚本了,让AI用python写。  详情 回复 发表于 昨天 17:18
回复

使用道具 举报

发表于 昨天 17:02 | 显示全部楼层
如果只是单纯访问GitHub的话 可以试试steam++ steampp.net

点评

我试试看。  发表于 昨天 17:42
回复

使用道具 举报

发表于 昨天 17:18 来自手机 | 显示全部楼层
窄口牛 发表于 2026-6-17 16:43
nttwqz 发表于 2026-6-17 16:36
你这点评回复不便。。。


你这个应该属于爬虫脚本了,让AI用python写。

点评

大没办法,毕竟是解释型语言,下载upx,放到windows目录,会压缩。如果你只是自己用,不是批量部署,留着python,直接用脚本也行。  详情 回复 发表于 昨天 18:03
py出来,编译不了,编译出来个头很大。  发表于 昨天 17:43
回复

使用道具 举报

发表于 昨天 17:50 | 显示全部楼层
不怎么明白
回复

使用道具 举报

发表于 昨天 18:03 来自手机 | 显示全部楼层
nttwqz 发表于 2026-6-17 17:18
你这个应该属于爬虫脚本了,让AI用python写。

大没办法,毕竟是解释型语言,下载upx,放到windows目录,会压缩。如果你只是自己用,不是批量部署,留着python,直接用脚本也行。
回复

使用道具 举报

发表于 昨天 23:04 | 显示全部楼层
直接使用UsbEAm Hosts Editor软件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-6-18 04:53

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表