赞
踩
对 GitHub 访问太难了:访问慢、图片加载不出来
项目来源 github520
#!/usr/bin/python3 # -*- coding:utf-8 -*- # # Author : XueWeiHan # E-mail : 595666367@qq.com # Date : 2020-05-19 15:27 # Desc : 获取最新的 GitHub 相关域名对应 IP import os import re import json from typing import Any, Optional from datetime import datetime, timezone, timedelta from pythonping import ping from requests_html import HTMLSession from retry import retry GITHUB_URLS = [ 'alive.github.com', 'api.github.com', 'assets-cdn.github.com', 'avatars.githubusercontent.com', 'avatars0.githubusercontent.com', 'avatars1.githubusercontent.com', 'avatars2.githubusercontent.com', 'avatars3.githubusercontent.com', 'avatars4.githubusercontent.com', 'avatars5.githubusercontent.com', 'camo.githubusercontent.com', 'central.github.com', 'cloud.githubusercontent.com', 'codeload.github.com', 'collector.github.com', 'desktop.githubusercontent.com', 'favicons.githubusercontent.com', 'gist.github.com', 'github-cloud.s3.amazonaws.com', 'github-com.s3.amazonaws.com', 'github-production-release-asset-2e65be.s3.amazonaws.com', 'github-production-repository-file-5c1aeb.s3.amazonaws.com', 'github-production-user-asset-6210df.s3.amazonaws.com', 'github.blog', 'github.com', 'github.community', 'github.githubassets.com', 'github.global.ssl.fastly.net', 'github.io', 'github.map.fastly.net', 'githubstatus.com', 'live.github.com', 'media.githubusercontent.com', 'objects.githubusercontent.com', 'pipelines.actions.githubusercontent.com', 'raw.githubusercontent.com', 'user-images.githubusercontent.com', 'vscode.dev', 'education.github.com' ] HOSTS_TEMPLATE = """# GitHub520 Host Start {content} # Update time: {update_time} # Update url: https://raw.hellogithub.com/hosts # Star me: https://github.com/521xueweihan/GitHub520 # GitHub520 Host End\n""" #def write_file(hosts_content: str, update_time: str) -> bool: def write_file(hosts_content: str, update_time: str): output_doc_file_path = os.path.join(os.path.dirname(__file__), "README.md") template_path = os.path.join(os.path.dirname(__file__), "README_template.md") write_host_file(hosts_content) if os.path.exists(output_doc_file_path): with open(output_doc_file_path, "r") as old_readme_fb: old_content = old_readme_fb.read() if old_content: old_hosts = old_content.split("```bash")[1].split("```")[0].strip() old_hosts = old_hosts.split("# Update time:")[0].strip() hosts_content_hosts = hosts_content.split("# Update time:")[ 0].strip() if old_hosts == hosts_content_hosts: print("host not change") return False with open(template_path, "r") as temp_fb: template_str = temp_fb.read() hosts_content = template_str.format(hosts_str=hosts_content, update_time=update_time) with open(output_doc_file_path, "w") as output_fb: output_fb.write(hosts_content) return True def write_host_file(hosts_content: str) -> None: output_file_path = os.path.join(os.path.dirname(__file__), 'hosts') with open(output_file_path, "w") as output_fb: output_fb.write(hosts_content) def write_json_file(hosts_list: list) -> None: output_file_path = os.path.join(os.path.dirname(__file__), 'hosts.json') with open(output_file_path, "w") as output_fb: json.dump(hosts_list, output_fb) def get_best_ip(ip_list: list) -> str: ping_timeout = 2 best_ip = '' min_ms = ping_timeout * 1000 for ip in ip_list: ping_result = ping(ip, timeout=ping_timeout) print(ping_result.rtt_avg_ms) if ping_result.rtt_avg_ms == ping_timeout * 1000: # 超时认为 IP 失效 continue else: if ping_result.rtt_avg_ms < min_ms: min_ms = ping_result.rtt_avg_ms best_ip = ip return best_ip @retry(tries=3) def get_json(session: Any) -> Optional[list]: url = 'https://raw.hellogithub.com/hosts.json' try: rs = session.get(url) data = json.loads(rs.text) return data except Exception as ex: print(f"get: {url}, error: {ex}") raise Exception @retry(tries=3) def get_ip(session: Any, github_url: str) -> Optional[str]: url = f'https://sites.ipaddress.com/{github_url}' headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)' ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/1' '06.0.0.0 Safari/537.36'} try: rs = session.get(url, headers=headers, timeout=5) table = rs.html.find('#dns', first=True) pattern = r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b" ip_list = re.findall(pattern, table.text) best_ip = get_best_ip(ip_list) if best_ip: return best_ip else: raise Exception(f"url: {github_url}, ipaddress empty") except Exception as ex: print(f"get: {url}, error: {ex}") raise Exception def main(verbose=False) -> None: if verbose: print('Start script.') session = HTMLSession() content = "" content_list = get_json(session) for item in content_list: content += item[0].ljust(30) + item[1] + "\n" # content_list = [] # for index, github_url in enumerate(GITHUB_URLS): # try: # ip = get_ip(session, github_url) # # content += ip.ljust(30) + github_url + "\n" # content_list.append((ip, github_url,)) # except Exception: # continue # if verbose: # print(f'process url: {index + 1}/{len(GITHUB_URLS)}') if not content: return update_time = datetime.utcnow().astimezone( timezone(timedelta(hours=8))).replace(microsecond=0).isoformat() hosts_content = HOSTS_TEMPLATE.format(content=content, update_time=update_time) #has_change = write_file(hosts_content, update_time) #if has_change: # write_json_file(content_list) #if verbose: # print(hosts_content) # print('End script.') if __name__ == '__main__': main(True)
# sudo pip3 install pyftpdlib
# sudo pip3 install typing
# sudo pip3 install pythonping
# sudo pip3 install requests_html
# sudo pip3 install retry
[devops@my-dev Github_to_ip]$ ./get_new_github_ip.sh Start script. [devops@my-dev Github_to_ip]$ cat hosts # GitHub520 Host Start 140.82.112.25 alive.github.com 140.82.112.5 api.github.com 185.199.110.153 assets-cdn.github.com 185.199.111.133 avatars.githubusercontent.com 185.199.111.133 avatars0.githubusercontent.com 185.199.111.133 avatars1.githubusercontent.com 185.199.111.133 avatars2.githubusercontent.com 185.199.111.133 avatars3.githubusercontent.com 185.199.111.133 avatars4.githubusercontent.com 185.199.111.133 avatars5.githubusercontent.com 185.199.111.133 camo.githubusercontent.com 140.82.114.22 central.github.com 185.199.109.133 cloud.githubusercontent.com 140.82.112.10 codeload.github.com 140.82.112.22 collector.github.com 185.199.111.133 desktop.githubusercontent.com 185.199.111.133 favicons.githubusercontent.com 140.82.112.4 gist.github.com 52.217.34.20 github-cloud.s3.amazonaws.com 54.231.193.161 github-com.s3.amazonaws.com 54.231.232.41 github-production-release-asset-2e65be.s3.amazonaws.com 52.217.41.76 github-production-repository-file-5c1aeb.s3.amazonaws.com 52.217.202.169 github-production-user-asset-6210df.s3.amazonaws.com 192.0.66.2 github.blog 140.82.112.3 github.com 140.82.113.17 github.community 185.199.110.154 github.githubassets.com 151.101.193.194 github.global.ssl.fastly.net 185.199.110.153 github.io 185.199.111.133 github.map.fastly.net 185.199.110.153 githubstatus.com 140.82.112.25 live.github.com 185.199.111.133 media.githubusercontent.com 185.199.111.133 objects.githubusercontent.com 13.107.42.16 pipelines.actions.githubusercontent.com 185.199.111.133 raw.githubusercontent.com 185.199.111.133 user-images.githubusercontent.com 13.107.213.40 vscode.dev 140.82.113.22 education.github.com # Update time: 2024-01-17T02:35:15+08:00 # Update url: https://raw.hellogithub.com/hosts # Star me: https://github.com/521xueweihan/GitHub520 # GitHub520 Host End
然后再把host文件内容添加到windos或者Linux host文件
然后就可通过windos或者linux 进行下载自己想要的文档
# wget https://github.com/coreos/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz
--2024-01-17 10:52:12-- https://github.com/coreos/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz
Resolving github.com (github.com)... 140.82.114.3
Connecting to github.com (github.com)|140.82.114.3|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://github.com/etcd-io/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz [following]
--2024-01-17 10:52:14-- https://github.com/etcd-io/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz
Reusing existing connection to github.com:443.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/11225014/7c787e4c-8f2b-11e8-8a29-4db755239b18?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240117%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240117T025214Z&X-Amz-Expires=300&X-Amz-Signature=d09731cfec5a21a82f058448489dc1a0bfb7ec7524bd2f5a3d47bc5f315160f6&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=11225014&response-content-disposition=attachment%3B%20filename%3Detcd-v3.3.9-linux-amd64.tar.gz&response-content-type=application%2Foctet-stream [following]
--2024-01-17 10:52:14-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/11225014/7c787e4c-8f2b-11e8-8a29-4db755239b18?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240117%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240117T025214Z&X-Amz-Expires=300&X-Amz-Signature=d09731cfec5a21a82f058448489dc1a0bfb7ec7524bd2f5a3d47bc5f315160f6&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=11225014&response-content-disposition=attachment%3B%20filename%3Detcd-v3.3.9-linux-amd64.tar.gz&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.110.133
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11254519 (11M) [application/octet-stream]
Saving to: ?声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。