From 74f7d0df3979e7298f141ab1fdde2f7bf9af3ff5 Mon Sep 17 00:00:00 2001 From: CharlesPikachu <1159254961@qq.com> Date: Wed, 11 May 2022 09:19:06 +0800 Subject: [PATCH] bump to v0.1.22, support githubacceleration --- README.md | 1 + docs/Changelog.md | 7 +- docs/Quickstart.md | 29 ++++++ pytools/__init__.py | 2 +- pytools/modules/__init__.py | 1 + .../modules/githubacceleration/__init__.py | 2 + .../githubacceleration/githubacceleration.py | 95 +++++++++++++++++++ pytools/pytools.py | 2 +- requirements.txt | 3 +- 9 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 pytools/modules/githubacceleration/__init__.py create mode 100644 pytools/modules/githubacceleration/githubacceleration.py diff --git a/README.md b/README.md index 7729c88..c5c6c32 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,7 @@ You can star this repository to keep track of the project if it's helpful for yo | goodgoodgenerator | [click](https://mp.weixin.qq.com/s/mH9LyIdHe1uX2E3oAjlIoQ) | [click](./pytools/modules/goodgoodgenerator) | 稳中向好生成器 | | tianyancha | [click](https://mp.weixin.qq.com/s/IpaOCq1600JyIf9QWieoTQ) | [click](./pytools/modules/tianyancha) | 天眼查 | | decryptbrowser | [click](https://mp.weixin.qq.com/s/sotiVBWrFxcyYAgdRJ5ydA) | [click](./pytools/modules/decryptbrowser) | 盗取浏览器里的账号密码 | +| githubacceleration | [click]() | [click](./pytools/modules/githubacceleration) | 国内访问Github一键加速脚本 | # Install diff --git a/docs/Changelog.md b/docs/Changelog.md index bec3a8a..3457b54 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -78,4 +78,9 @@ **2022-05-09** - 版本号: v0.1.21, -- 更新内容: 支持盗取浏览器里的账号密码。 \ No newline at end of file +- 更新内容: 支持盗取浏览器里的账号密码。 + +**2022-05-11** + +- 版本号: v0.1.22, +- 更新内容: 国内访问Github一键加速脚本。 \ No newline at end of file diff --git a/docs/Quickstart.md b/docs/Quickstart.md index b7c2c22..0bd4afc 100644 --- a/docs/Quickstart.md +++ b/docs/Quickstart.md @@ -980,6 +980,35 @@ tool_client.execute('decryptbrowser') } ``` +#### 国内访问Github一键加速脚本 + +**1.公众号文章链接** + +[点击查看]() + +**2.功能介绍** + +国内访问Github一键加速脚本。 + +**3.调用示例代码** + +```python +from pytools import pytools + +tool_client = pytools.pytools() +tool_client.execute('githubacceleration') +``` + +**4.config中支持的参数** + +``` +{ + domains: Github相关的域名列表, 默认为"None", 即自动生成, + hosts_path: 需要修改的hosts文件路径, 默认为"None", 即自动生成, + proxies: 抓取域名对应的IP地址时使用的代理, +} +``` + ## 随机运行一个小程序 diff --git a/pytools/__init__.py b/pytools/__init__.py index 3cec833..d2e2304 100644 --- a/pytools/__init__.py +++ b/pytools/__init__.py @@ -5,7 +5,7 @@ '''url''' __url__ = 'https://github.com/CharlesPikachu/pytools' '''version''' -__version__ = '0.1.21' +__version__ = '0.1.22' '''author''' __author__ = 'Charles' '''email''' diff --git a/pytools/modules/__init__.py b/pytools/modules/__init__.py index e63e6d8..9a10096 100644 --- a/pytools/modules/__init__.py +++ b/pytools/modules/__init__.py @@ -30,6 +30,7 @@ from .controlpcbyemail import ControlPCbyEmail from .naughtyconfession import NaughtyConfession from .goodgoodgenerator import GoodGoodGenerator +from .githubacceleration import GithubAcceleration from .luxunsentencesquery import LuxunSentencesQuery from .hubbleseeonbirthday import HubbleSeeOnBirthday from .newyearcardgenerator import NewYearCardGenerator diff --git a/pytools/modules/githubacceleration/__init__.py b/pytools/modules/githubacceleration/__init__.py new file mode 100644 index 0000000..d7b9bd6 --- /dev/null +++ b/pytools/modules/githubacceleration/__init__.py @@ -0,0 +1,2 @@ +'''初始化''' +from .githubacceleration import GithubAcceleration \ No newline at end of file diff --git a/pytools/modules/githubacceleration/githubacceleration.py b/pytools/modules/githubacceleration/githubacceleration.py new file mode 100644 index 0000000..8036bf9 --- /dev/null +++ b/pytools/modules/githubacceleration/githubacceleration.py @@ -0,0 +1,95 @@ +''' +Function: + 国内访问Github一键加速脚本 +Author: + Charles +微信公众号: + Charles的皮卡丘 +''' +import os +import re +import shutil +import requests +import platform +from tqdm import tqdm +from pythonping import ping +from bs4 import BeautifulSoup + + +'''国内访问Github一键加速脚本''' +class GithubAcceleration(): + tool_name = '国内访问Github一键加速脚本' + def __init__(self, domains=None, hosts_path=None, proxies={'https': '127.0.0.1:1080'}): + self.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' + ] if domains is None else domains + self.hosts_path = hosts_path + if self.hosts_path is None: + if 'Windows' in platform.platform(): + self.hosts_path = r'C:\Windows\System32\drivers\etc\hosts' + else: + self.hosts_path = '/etc/hosts' + self.headers = { + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36' + } + self.session = requests.Session() + if proxies is not None: self.session.proxies.update(proxies) + self.session.headers.update(self.headers) + '''运行''' + def run(self): + domain2ip_dict = {} + # 生成符合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) + # 更新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 True + return 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'{ip}\t{domain}\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') + '''ping所有的ip并返回TTS最小的ip''' + def lowestrttip(self, ips): + best_ip, best_ip_tts = None, 1e10 + for ip in ips: + result = ping(ip, timeout=1, count=5, verbose=False) + avg_tts = result.rtt_avg + if best_ip_tts > avg_tts: + best_ip_tts, best_ip = avg_tts, ip + return best_ip \ No newline at end of file diff --git a/pytools/pytools.py b/pytools/pytools.py index 138b1bb..1b40708 100644 --- a/pytools/pytools.py +++ b/pytools/pytools.py @@ -51,7 +51,7 @@ def initialize(self): 'iplocationquery': IPLocationQuery, 'genderpredictor': GenderPredictor, 'qrcodegenerator': QRCodeGenerator, 'coupletgenerator': CoupletGenerator, 'artsigngenerator': ArtSignGenerator, 'controlpcbyemail': ControlPCbyEmail, 'naughtyconfession': NaughtyConfession, 'luxunsentencesquery': LuxunSentencesQuery, 'hubbleseeonbirthday': HubbleSeeOnBirthday, 'newyearcardgenerator': NewYearCardGenerator, 'trumptweetsgenerator': TrumpTweetsGenerator, 'sovietgenerator': SovietGenerator, - 'goodgoodgenerator': GoodGoodGenerator, 'tianyancha': Tianyancha, 'decryptbrowser': DecryptBrowser, + 'goodgoodgenerator': GoodGoodGenerator, 'tianyancha': Tianyancha, 'decryptbrowser': DecryptBrowser, 'githubacceleration': GithubAcceleration, } return supported_tools '''获得所有支持的tools信息''' diff --git a/requirements.txt b/requirements.txt index e8f7b61..9ca266b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,4 +14,5 @@ IPy pillow openpyxl click -beautifulsoup4 \ No newline at end of file +beautifulsoup4 +pythonping \ No newline at end of file