• 国内访问Github超级慢?那是你没有用我这个脚本。直接起飞。


    导语

    之前很多朋友咨询过国内访问Github较慢的问题,然后我一般让他们自己去知乎上找攻略,但今天我才发现网上竟然没有一个一键配置的脚本,一般都需要我们跟着教程一步步地去做才行。这也太麻烦了,于是自己动手写了个脚本,只需要简单运行一下就可以实现访问Github加速的功能。

    废话不多说,让我们愉快地开始吧~

    开发工具

    Python版本:3.7.8

    相关模块:

    pikachupytools模块;

    pythonping模块;

    beautifulsoup4模块;

    requests模块;

    tqdm模块;

    以及一些python自带的模块。

    环境搭建

    安装Python并添加到环境变量,pip安装需要的相关模块即可。

    原理简介

    核心原理就是把Github相关的域名和对应的ip地址写到本地hosts文件里,从而绕过DNS解析,达到加速访问的目的。

    其中Github相关的域名整理如下:

    1. domains = [
    2. 'github.com', 'www.github.com', 'github.global.ssl.fastly.net', 'github.map.fastly.net', 'github.githubassets.com',
    3. 'github.io', 'assets-cdn.github.com', 'gist.github.com', 'help.github.com', 'api.github.com', 'nodeload.github.com',
    4. 'codeload.github.com', 'raw.github.com', 'documentcloud.github.com', 'status.github.com', 'training.github.com',
    5. 'raw.githubusercontent.com', 'gist.githubusercontent.com', 'cloud.githubusercontent.com', 'camo.githubusercontent.com',
    6. 'avatars0.githubusercontent.com', 'avatars1.githubusercontent.com', 'avatars2.githubusercontent.com', 'avatars3.githubusercontent.com',
    7. 'avatars4.githubusercontent.com', 'avatars5.githubusercontent.com', 'avatars6.githubusercontent.com', 'avatars7.githubusercontent.com',
    8. 'avatars8.githubusercontent.com', 'user-images.githubusercontent.com', 'favicons.githubusercontent.com', 'github-cloud.s3.amazonaws.com',
    9. 'github-production-release-asset-2e65be.s3.amazonaws.com', 'github-production-user-asset-6210df.s3.amazonaws.com',
    10. 'github-production-repository-file-5c1aeb.s3.amazonaws.com', 'alive.github.com', 'guides.github.com', 'docs.github.com'
    11. ]

    然后我们利用如下网站查询每个域名对应的IP地址:

    https://ipaddress.com/website/ + 域名

    效果大概是这样子的:

     

    代码实现如下:

     

    1. # 生成符合ipadredd.com查询的url地址, 从而解析出域名对应的IP
    2. pbar = tqdm(self.domains)
    3. for domain in pbar:
    4. pbar.set_description(f'parse {domain}')
    5. url = f'https://ipaddress.com/website/{domain}'
    6. response = self.session.get(url, headers=self.headers)
    7. soup = BeautifulSoup(response.text, 'lxml')
    8. ips = []
    9. for item in soup.find('tbody', id='dnsinfo').select('tr td a'):
    10. ip = re.findall(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b", item.text)
    11. if ip: ips.append(''.join(ip))
    12. assert len(ips) > 0, f'parse {domain} error'
    13. if len(ips) == 1:
    14. domain2ip_dict[domain] = ''.join(ips)
    15. else:
    16. domain2ip_dict[domain] = self.lowestrttip(ips)

    最后,我们根据操作系统的不同更新一下对应位置的hosts文件就行:

    1. # 更新host文件
    2. print(f'[INFO]: start to update the host file')
    3. shutil.copy(self.hosts_path, self.hosts_path + '.bak')
    4. fp_host, fp_temp = open(self.hosts_path, 'r'), open('temphost', 'w')
    5. def distinct(domains, line):
    6. for domain in domains:
    7. if domain in line: return True
    8. return False
    9. for line in fp_host.readlines():
    10. if not distinct(self.domains, line):
    11. fp_temp.write(line)
    12. for domain, ip in domain2ip_dict.items():
    13. fp_temp.write(f'{domain}\t{ip}\n')
    14. fp_host.close()
    15. fp_temp.close()
    16. shutil.copy('./temphost', self.hosts_path)
    17. os.remove('./temphost')
    18. if 'Windows' in platform.platform():
    19. os.system('ipconfig /flushdns')
    20. else:
    21. os.system('systemd-resolve --flush-caches')
    22. print(f'[INFO]: update the host file successfully')

    更新之后的hosts文件大概长这样:

     

    大功告成啦,完整源代码详见相关文件~

     

    效果展示

    想要快速测试的小伙伴只需要pip安装一下pikachupytools包:

    pip install pikachupytools --upgrade

    然后简单写几行代码就能调用运行了:

    1. from pytools import pytools
    2. tool_client = pytools.pytools()
    3. tool_client.execute('githubacceleration')

    效果如下(必须管理员权限运行):

     到这里就完美结束了,你学会了吗?源码见下方公众号!

  • 相关阅读:
    计算机毕业设计javaweb理发店预约网站源码
    C++ 输入输出优化
    c++ 模板 模板元编程 简单实验
    【云原生之Docker实战】使用Docker部署Komga个人漫画服务器
    Linux:时间指令 - cal & date
    【读书笔记】《Head First设计模式(中文版)》【TBC】
    一行代码解决CoreData托管对象属性变更在SwiftUI中无动画效果的问题
    Tmall商城订单管理模块分析
    缓存一致性,删除缓存,写入缓存,缓存击穿,缓存穿透,缓存雪崩
    【ML特征工程】第 4 章 :特征缩放的影响:从词袋到 Tf-Idf
  • 原文地址:https://blog.csdn.net/weixin_43881394/article/details/127841935