写在最前
Github时不时抽风,老是访问不了,诚然,用科学上网能解决一切这类问题,但是,能不翻墙还是不要翻墙的好。这里采用的是通过修改本地hosts,配置域名和IP映射关系,这样一来,当我们访问github时,这些域名可以直接从本地hosts文件中获取IP,而不需要再去DNS服务器上询问一圈。从而提高访问速度。
修改hosts
以Windows系统为例,
hosts的路径是C:\Windows\System32\drivers\etc,
打开后将以下内容复制到文件最下方。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 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 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,输入
刷新DNS缓存。之后就能变快了……
才怪嘞,因为上述域名的IP是不停在变的,这一串映射仅仅适用于今天而已,到了明天,ip一变动,又登不上了,我总不可能天天来更新吧?
使用爬虫脚本实时获取最新ip
需要查询ip地址的域名有这么多。手动添加肯定是不乐意的了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 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
|
因为github相关的诸多域名的ip是在变动的,为了能够实时获取最新的ip,我们可以使用爬虫来从站长之家或其余ip查询网站上爬取最新ip。
这里要用到python,安装推荐使用Anaconda,Anaconda安装方式推荐参看Win10重装日记的3.2章节。根据Anaconda版本与python版本的对照选择自己需要的Anaconda安装包,然后直接安装即可,路径建议修改为非系统盘,同时务必勾选将python路径加入到环境变量的选项。
新建一个python脚本——githosts.py(最简单的方法,新建一个txt文本文件,把下面的代码粘贴进去以后,修改后缀为.py)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #!/usr/bin/env python
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 import os
ans = [] for i in s.split(): try: url = "http://ip.tool.chinaz.com/" + i.strip() resp = requests.get(url) soup = BeautifulSoup(resp.text,"html5lib") x = soup.find(class_="IcpMain02") x = x.find_all("span", class_="Whwtdhalf") x = "%s %s" % (x[5].string.strip(), i.strip()) print(x) ans.append(x) except: print("返回值为null,查询失败。请确保域名正确")
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))
os.system('ipconfig /flushdns')
|
然后把githosts.py
放到C:\Windows\System32
目录下(不放其实也可以,只是这样一来每次都要自己cd路径。)
win+X,按A,以管理员权限启动Powershell,输入
然后脚本就会自动爬取最新的IP与域名到你的hosts文件中了。
因为github相关的诸多域名的ip是在变动的,为了能够实时获取最新的ip,我们可以使用爬虫来从站长之家或其余ip查询网站上爬取最新ip。
这里要用到python,安装推荐使用Anaconda,Anaconda安装方式推荐参看Ubuntu重装日记的7.2章节。根据Anaconda版本与python版本的对照选择自己需要的Anaconda安装包,按照教程指示安装,注意安装时控制台输出的提示信息,务必选择将python路径加入到环境变量的选项。
新建一个python脚本——githosts.py(最简单的方法,新建一个txt文本文件,把下面的代码粘贴进去以后,修改后缀为.py)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| #!/usr/bin/env python
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 import os
ans = [] for i in s.split(): try: url = "http://ip.tool.chinaz.com/" + i.strip() resp = requests.get(url) soup = BeautifulSoup(resp.text,"html5lib") x = soup.find(class_="IcpMain02") x = x.find_all("span", class_="Whwtdhalf") x = "%s %s" % (x[5].string.strip(), i.strip()) print(x) ans.append(x) except: print("返回值为null,查询失败。请确保域名正确")
hosts = r"/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))
os.system('sudo killall -HUP mDNSResponder')
|
在脚本所在文件夹打开terminal(即终端),输入指令
然后脚本就会自动爬取最新的IP与域名到你的hosts文件中了。
可能遇到的bug
老老实实按照上面说的来,看仔细加粗的地方,就不会有下面的bug。
没有权限修改hosts
这个应该是windows用户才会遇到,如果是脚本改写,那一定是没有用管理员权限启动Powershell,如果只是单纯手动添加hosts,那么可以直接复制hosts文件到有权限修改的目录下,然后把IP复制进去,接着再复制回原hosts路径,覆盖掉当前hosts。也可以考虑使用火绒安全管家,它的工具箱里有提供直接修改hosts的功能。
python的环境变量没添加
那就是安装的时候没勾选,找到Anaconda的安装目录,在根目录里有python.exe文件,至于怎么添加还请自行百度。(其实卸载了Anaconda以后重新安装,这次记得勾选添加到环境变量也可以。顺带一提,卸载很慢哦,还不如老老实实自己添加一下),UNIX系统的操作也类似。
缺少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查询结果)
MAC OS dns刷新失败
博主没使用过mac系统,但是有人反馈了就去查了一下,Mac OS刷新DNS的指令貌似是有在随版本变化的。请读者根据自己的版本选择相应的指令,替换脚本最后一行的指令内容。
1 2 3 4 5 6
| sudo killall -HUP mDNSResponder
dscacheutil -flushcache
lookupd -flushcache
|
参考内容
更多内容