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

news/2024/4/29 3:32:17/文章来源:https://blog.csdn.net/weixin_43881394/article/details/127841935

导语

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

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

开发工具

Python版本:3.7.8

相关模块:

pikachupytools模块;

pythonping模块;

beautifulsoup4模块;

requests模块;

tqdm模块;

以及一些python自带的模块。

环境搭建

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

原理简介

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

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


domains = ['github.com', 'www.github.com', 'github.global.ssl.fastly.net', 'github.map.fastly.net', 'github.githubassets.com','github.io', 'assets-cdn.github.com', 'gist.github.com', 'help.github.com', 'api.github.com', 'nodeload.github.com','codeload.github.com', 'raw.github.com', 'documentcloud.github.com', 'status.github.com', 'training.github.com','raw.githubusercontent.com', 'gist.githubusercontent.com', 'cloud.githubusercontent.com', 'camo.githubusercontent.com','avatars0.githubusercontent.com', 'avatars1.githubusercontent.com', 'avatars2.githubusercontent.com', 'avatars3.githubusercontent.com','avatars4.githubusercontent.com', 'avatars5.githubusercontent.com', 'avatars6.githubusercontent.com', 'avatars7.githubusercontent.com','avatars8.githubusercontent.com', 'user-images.githubusercontent.com', 'favicons.githubusercontent.com', 'github-cloud.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', 'alive.github.com', 'guides.github.com', 'docs.github.com'
]

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

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

效果大概是这样子的:

 

代码实现如下:

 

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

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


# 更新host文件
print(f'[INFO]: start to update the host file')
shutil.copy(self.hosts_path, self.hosts_path + '.bak')
fp_host, fp_temp = open(self.hosts_path, 'r'), open('temphost', 'w')
def distinct(domains, line):for domain in domains:if domain in line: return Truereturn False
for line in fp_host.readlines():if not distinct(self.domains, line):fp_temp.write(line)
for domain, ip in domain2ip_dict.items():fp_temp.write(f'{domain}\t{ip}\n')
fp_host.close()
fp_temp.close()
shutil.copy('./temphost', self.hosts_path)
os.remove('./temphost')
if 'Windows' in platform.platform():os.system('ipconfig /flushdns')
else:os.system('systemd-resolve --flush-caches')
print(f'[INFO]: update the host file successfully')

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

 

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

 

效果展示

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

pip install pikachupytools --upgrade

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

from pytools import pytoolstool_client = pytools.pytools()
tool_client.execute('githubacceleration')

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_224056.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ceph浅谈

总谈 ceph简介 用上ceph,多台机器的磁盘空间在一起了,在一台机器上就可以看到使用所有空间。 还可以保存多份安全备份 存储先ceph,自我管理修复,跨机房,节点越多,并行化,论上,节点越…

1-(3-磺酸基)丙基-1-甲基-2-吡咯烷酮三氟甲磺酸盐[C3SO3Hnmp]CF3SO3

1-(3-磺酸基)丙基-1-甲基-2-吡咯烷酮三氟甲磺酸盐[C3SO3Hnmp]CF3SO3 离子液体(IonicLiquids)是完全由离子组成,现在多指在低于100摄氏度时呈液体状态的熔盐。通常由特定的有机阳离子和无机阴离子(或有机阴离子)构成。 离子液体特点 蒸汽压…

C++基础——模板讲解

目录 一. 泛型编程 二. 函数模板 1.格式: 2.定义: 1.隐式实例化 2.显式实例化 3.解决方法3:使用多个T类型 4.在C中编译器允许非模板函数和模板函数同时存在 一. 泛型编程 先来看一段代码: void Swap(int& p1, int&am…

LeetCode:8. 字符串转换整数 (atoi)

8. 字符串转换整数 (atoi)1)题目2)思路3)代码4)结果1)题目 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数…

逻辑判断与正则表达式文本处理

上一篇文章分享了正则表达式的操作,这一篇文章就让我们一起看看正则表达式与逻辑判断结合起来会发生什么吧!感兴趣的小伙伴欢迎评论区或者是私信留言! 一、题目描述: 输入一个字符串,检查其是否为合法的python变量。输入$$$结束:…

数据结构【队列】

文章目录(一)队列定义(二)队列实现(1)创建结构体(2)具体函数实现及解析1.1 初始化队列1.2入队列1.3出队列1.4取队首元素1.5取队尾元素1.6返回队列个数1.7判断是否为空1.8销毁队列&am…

FITC标记的STAT1-ASON,绿色荧光素标记STAT1反义寡核苷酸,FITC-STAT1-ASON

产品名称:FITC标记的STAT1-ASON,绿色荧光素标记STAT1反义寡核苷酸 ​​​​​​​英文名称:FITC-STAT1-ASON STAT1 是第一个被发现的 STATs 家族成员,其编码基因位于 2 号染色体上,由 750 个氨基酸残基组成&#xff…

随想录一刷Day55——动态规划

文章目录Day55_动态规划47. 判断子序列48. 不同的子序列Day55_动态规划 47. 判断子序列 392. 判断子序列 思路: 双指针很简单,O(n)O(n)O(n) 时间就能解决 这里还是用dp dp[i][j] 表示以 s[i - 1] 结尾的字符串和以 t[]i-1 为结尾的字符串的最大子序列长…

Linux篇【5】:Linux 进程概念(二)

目录 3.5、查看进程 3.6、通过系统调用接口获取正在进行的进程的标识符 3.7、通过系统调用接口创建子进程 - fork 初识 3.5、查看进程 [HJMhjmlcc ~]$ clear [HJMhjmlcc ~]$ pwd /home/HJM [HJMhjmlcc ~]$ ls [HJMhjmlcc ~]$ touch mytest.c [HJMhjmlcc ~]$ ls mytest.c [H…

基于51单片机的简易数字计算器Proteus仿真

资料编号:115 下面是相关功能视频演示: 115-基于51单片机的简易数字计算器Proteus仿真(源码仿真全套资料)功能说明: 该计算器系统51 系列的单片机进行的数字计算器系统设计,可以完成计算器的键盘输入&…

一看就会的Java方法

文章目录一、方法的定义和使用🍑1、为什么引入方法?🍑2、方法的定义🍑3、方法调用的执行过程🍑4、实参和形参的关系二、方法重载🍑1、为什么需要方法重载🍑2、方法重载的概念和特点&#x1f351…

用DIV+CSS技术设计的体育主题网站(足球介绍)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

【面经】之小鼠喝药问题

题目 现在有 10 只小白鼠和 1000 支药水,1000 支药水中有且仅有一支药水有毒,如果小白鼠喝下毒药,那么毒发的时间是两小时。 现在只给你两小时的时间,请问如何用这 10 只小白鼠测出哪支药水有毒?(忽略小白…

linux系统文件权限

目录 shell命令以及运行原理 具体体现(命令行解释器) Linux权限的概念 Linux下有两种用户:超级用户(root)、普通用户 su指令 Linux权限管理方面 文件访问者的分类(人) 为什么要有所属组? 文件属性…

STM32 Bootloader开发记录 2

在《stm32 bootloader开发记录.md》文档中,已经实现了Bootloader下的升级功能。可以在Bootloader启动时,进入升级模式,使用串口传输数据,来下载固件到flash中。 但是,在实际应用中,一般是在应用运行过程中…

基于单片机的指纹门禁设计

功能: 研究内容:本课题以单片机为核心采用C语言来开发一指纹电子密码锁。系统拟在Altium Designer9开发平台上设计原理图,并绘制PCB并制成单片机开发板,然后根据原理图将相关元器件焊接到开发板上。软件部分在Keil uVision4开发…

餐饮美食网页设计(HTML+CSS+JavaScript)

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

目标检测算法——自动驾驶开源数据集汇总2(附下载链接)

>>>深度学习Tricks&#xff0c;第一时间送达<<< 目录 一、Highway Driving 二、Mapillary Vistas 三、Cityscapes 四、CamVid >>>一起交流&#xff01;互相学习&#xff01;共同进步&#xff01;<<< 近期&#xff0c;小海带在空闲之余…

【FPGA】FPGA实现IIC协议读写EEPROM(二) -----EEPROM读写控制模块实现

EEPROM读写控制模块实现一、模块功能分析二、输入/输出信号三、EEPROM读写控制模块状态机四、EEPROM读写控制模块实现五、仿真测试写在前面&#xff1a; FPGA实现IIC协议读写EEPROM相关文章&#xff1a; IIC通信协议 【FPGA】FPGA实现IIC协议读写EEPROM&#xff08;一&#xff…

Kafka消费者之相关参数及分区分配再平衡

一、消费者重要参数 深刻的理解这些参数有利于大家在面对自己的项目场景上对配置文件有更好的把握&#xff01; 参数名称描述bootstrap.servers向 Kafka 集群建立初始连接用到的 host/port 列表。key.deserializer 和value.deserializer指定接收消息的 key 和 value 的反序列…