当前位置:   article > 正文

自动更新host实现github加速_host更新

host更新

如题,当前github的dns已经被污染,在不同cdn加持下,经常会抽风,虽然已经被微软收购,目前的整治可能还需一段时间,目前主流的优化方法无非也就几种,考虑安全风险问题,所以不推荐使用镜像加速,当然修改dns也有安全隐患,这个仁者见仁智者见智吧,分享一个自动修改host实现github加速的脚本。

原理简介

  1. 首先查询github在当前网路最佳的访问节点(存在安全隐患,如果不信任站长工具给的IP可以换成其他源,只要给的节点能够有效加速)
    站长工具dns
  2. 拷贝IP,打开系统host文件,单机修改时如此,如果在自己的局域网修改,则需要在dns服务器上设置,因为过期时间较短,建议制作成定时任务的形式更新(以下是我目前的host)。
185.199.110.153 assets-cdn.Github.com
#140.82.114.4 github.com
#52.192.72.89 github.com
# ipconfig /flushdns
#20.205.243.166 github.com
199.232.69.194 github.global.ssl.fastly.net
185.199.109.133 raw.githubusercontent.com
13.114.40.48 github.com
#52.69.186.44 github.com
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

源码

# coding=utf-8
"""

查询访问github最佳的女生路线并配置到电脑host文件中

dns来源:站长工具
"""
import json
import logging
import os
import platform

try:
    # noinspection PyCompatibility
    from urllib.request import urlopen, Request
    # noinspection PyCompatibility
    from urllib.error import HTTPError, URLError
except ImportError:
    # noinspection PyUnresolvedReferences,PyCompatibility
    from urllib2 import urlopen, Request, HTTPError, URLError

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

host_window = r"C:\Windows\System32\drivers\etc\hosts"
host_unix = r"/etc/hosts"


def get_best_ip(host):
    """查询dns github最佳解析路线, 默认是github"""
    # noinspection HttpUrlsUsage
    api = "http://tool.chinaz.com/AjaxSeo.aspx?t=dns&server=JACYvxRvL1|CnyK9sCL7~g=="
    headers = {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', }
    data = 'host={host}&type=1&total=10&process=6&right=3'.format(host=host)
    req = Request(api, data=data.encode(), headers=headers)
    try:
        res = urlopen(req).read().decode('utf-8')
        res_json = json.loads(res[1: -1])
        return (res_json.get('list') or [{}])[0].get('result', '')
    except (HTTPError, URLError):
        logger.exception("网络连接异常")
    except json.decoder.JSONDecodeError:
        logger.exception("解析错误")
    except UnicodeDecodeError:
        logger.exception("解码错误")
    except Exception as e:
        logger.exception("未知错误 {}".format(e))
    return ''


def _get_path():
    """获取host路径"""
    if platform.system() is "Windows":
        return host_window
    return host_unix


def read_host():
    """读取host"""
    with open(_get_path(), 'r', encoding='utf-8') as f:
        return f.read()


def write_host(text):
    """写入host"""
    with open(_get_path(), 'w+', encoding='utf-8') as f:
        return f.write(text)


def set_host(host='github.com'):
    """设置host文件"""
    host_text = read_host()
    logger.info('读取host \n{}'.format(host_text))
    host_list = [[keyword.strip() for keyword in line.split() if keyword] for line in host_text.split('\n') if
                 line and len(line.split()) >= 2]
    best_ip = get_best_ip(host)
    if not best_ip:
        logger.warning('查询到ip数据为空')
        return
    reset = False
    for line in host_list:
        # 如果是在使用的IP不与最佳ip相同则进行注释
        if line[1] == host:
            if not line[0].startswith('#'):
                line[0] = "#" + line[0]
            if line[0] == "#" + best_ip:
                line[0] = line[0].strip("#")
                reset = True
    if not reset:
        host_list.append([best_ip, host])
    host_text = '\n'.join([' '.join(line) for line in host_list])
    logger.info('修改host \n{}'.format(host_text))
    write_host(host_text)
    if platform.system() == 'Windows':
        os.system('ipconfig /flushdns')
    logger.info('设置成功, 当前 {} 的解析IP为 {}'.format(host, best_ip))


if __name__ == '__main__':
    set_host()
  • 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
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/578687
推荐阅读
相关标签
  

闽ICP备14008679号