写在最前

Github时不时抽风,老是访问不了,诚然,用科学上网能解决一切这类问题,但是,能不翻墙还是不要翻墙的好。这里采用的是通过修改本地hosts,配置域名和IP映射关系,这样一来,当我们访问github时,这些域名可以直接从本地hosts文件中获取IP,而不需要再去DNS服务器上询问一圈。从而提高访问速度。

修改hosts

以Windows系统为例,
hosts的路径是C:\Windows\System32\drivers\etc
打开后将以下内容复制到文件最下方。

185.199.108.154               github.githubassets.com
199.232.68.133 camo.githubusercontent.com
199.232.68.133 github.map.fastly.net
199.232.69.194 github.global.ssl.fastly.net
140.82.113.3 gist.github.com #gist现在被墙的很彻底,就算添加进hosts也访问不了。
185.199.108.153 github.io
140.82.113.4 github.com
140.82.114.5 api.github.com
199.232.68.133 raw.githubusercontent.com
199.232.68.133 user-images.githubusercontent.com
199.232.68.133 favicons.githubusercontent.com
199.232.68.133 avatars5.githubusercontent.com
199.232.68.133 avatars4.githubusercontent.com
199.232.68.133 avatars3.githubusercontent.com
199.232.68.133 avatars2.githubusercontent.com
199.232.68.133 avatars1.githubusercontent.com
199.232.68.133 avatars0.githubusercontent.com
140.82.114.9 codeload.github.com
52.217.83.84 github-cloud.s3.amazonaws.com
52.216.229.155 github-com.s3.amazonaws.com
52.216.30.60 github-production-release-asset-2e65be.s3.amazonaws.com
52.216.17.0 github-production-user-asset-6210df.s3.amazonaws.com
52.216.236.43 github-production-repository-file-5c1aeb.s3.amazonaws.com

保存后,win+X,按A,以管理员权限启动powershell,输入
ipconfig /flushdns

刷新DNS缓存。之后就能变快了……

才怪嘞,因为上述域名的IP是不停在变的,这一串映射仅仅适用于今天而已,到了明天,ip一变动,又登不上了,我总不可能天天来更新吧?

使用爬虫脚本实时获取最新ip

转载自weiyinfu的博客园。以下脚本为weiyinfu所原创,笔者仅做转载

需要查询ip地址的域名有这么多。手动添加肯定是不乐意的了。

github.githubassets.com
camo.githubusercontent.com
github.map.fastly.net
github.global.ssl.fastly.net
gist.github.com #gist现在被墙的很彻底,加进hosts也无济于事
github.io
github.com
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
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

因为github相关的诸多域名的ip是在变动的,为了能够实时获取最新的ip,我们可以使用爬虫来从站长之家或其余ip查询网站上爬取最新ip。

这里要用到python,安装推荐使用Anaconda,Anaconda安装方式推荐参看Win10重装日记的3.2章节。根据Anaconda版本与python版本的对照选择自己需要的Anaconda安装包,然后直接安装即可,路径建议修改为非系统盘,同时务必勾选将python路径加入到环境变量的选项。

新建一个python脚本——githosts.py(最简单的方法,新建一个txt文本文件,把下面的代码粘贴进去以后,修改后缀为.py)

# 需要添加的域名
s = """
github.githubassets.com
camo.githubusercontent.com
github.map.fastly.net
github.global.ssl.fastly.net
gist.github.com
github.io
github.com
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
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
"""
# 引入必要的包库
import requests
from bs4 import BeautifulSoup

ans = []
for i in s.split():
url = "https://ip.tool.chinaz.com/" + i.strip() #组装待查询IP的URL
resp = requests.get(url)
soup = BeautifulSoup(resp.text,"html.parser")
x = soup.find(class_="IcpMain02")
x = x.find_all("span", class_="Whwtdhalf") #爬取IP
x = "%s %s" % (x[5].string.strip(), i.strip()) #将各组IP组合成最终结果。
print(x)
ans.append(x)
# 将结果写入hosts
hosts = r"C:\Windows\System32\drivers\etc\hosts"
with open(hosts, "r") as f:
content = [i for i in f.readlines() if i.startswith("#")]
content.extend(ans)
with open(hosts, "w") as f:
f.write("\n".join(content))

然后把githosts.py放到C:\Windows\System32目录下(不放其实也可以,只是这样一来每次都要自己cd路径。)
win+X,按A以管理员权限启动Powershell,输入

python githosts.py

然后脚本就会自动爬取最新的IP与域名到你的hosts文件中了。

可能遇到的bug

老老实实按照上面说的来,看仔细加粗的地方,就不会有下面的bug。

没有权限修改hosts

这个应该是windows用户才会遇到,如果是脚本改写,那一定是没有用管理员权限启动Powershell,如果只是单纯手动添加hosts,那么可以直接复制hosts文件到有权限修改的目录下,然后把IP复制进去,接着再复制回原hosts路径,覆盖掉当前hosts。也可以考虑使用火绒安全管家,它的工具箱里有提供直接修改hosts的功能。

python的环境变量没添加

那就是安装的时候没勾选,找到Anaconda的安装目录,在根目录里有python.exe文件,至于怎么添加还请自行百度。(其实卸载了Anaconda以后重新安装,这次记得勾选添加到环境变量也可以。顺带一提,卸载很慢哦,还不如老老实实自己添加一下)

缺少requests包

一般Anaconda是自带一些基础包库的,没有这个包说明你是从python官网下载的python安装包。不过就算缺少,也可以通过pip install [packages]来安装。遇到安装速度慢的情况,就去自行百度“pip install 换清华源”

报错“NoneType’ object has no attribute ‘find_all”

该报错有两种情况。

最有可能是站长之家的域名网址变动,例如从ip.chinaz.com变为ip.tool.chinaz.com,将源代码中url = "https://ip.tool.chinaz.com/" + i.strip()里的域名改为现行网址即可。

如果是页面元素结构变化则需要通过F12查看原网页元素id或者class来确定元素位置重新改写源代码x = x.find_all("span", class_="Whwtdhalf")中需要find_all的元素(也即是我们需要的ip查询结果)

参考内容

  1. github访问太慢解决方案:脚本原作者。
  2. GitHub520开源项目:值得添加IP的域名参考。