一 问题描述
github打不开,尝试ping下github,打不开时ping不通,反之,ping通之后就能打开。
windows+R,键入cmd回车,打开cmd窗口,输入
ping github.com
回车,发现请求超时。
二 解决方案
在本地hosts文件中加入IP地址。
hosts文件位于C:\Windows\System32\drivers\etc\hosts,打开hosts文件,在末尾添加如下IP:
140.82.112.4 github.com
140.82.114.4 www.github.com
199.232.5.194 github.global.ssl.fastly.net
54.231.114.219 github-cloud.s3.amazonaws.com
添加后如图:
保存后返回cmd窗口,重新ping,成功。
输入以下命令刷新dns缓存。
ipconfig /flushdns
此时再进入github就能打开。
针对部分机型hosts无法编辑的情况,可用此处的hosts代替原来的hosts文件。
GitHub 链接缓慢或者连不上大概率是 DNS 域名解析出问题了,解决这一问题的办法就是修改 hosts 文件,将 IP 地址直接与域名对应起来,跳过解析过程,从而正常打开 github.com 。
本文第一、二节分别对查询IP与手动修改hosts文件进行说明,第三节介绍自动化更新 hosts 文件的方法。
1. 查询 IP
查询 IP 地址的网站有很多,这里推荐使用 IPAddress.com 。
IPAddressipaddress.com/website/github.com
上面的 IP 查询一次只能查一个域名,不够效率,所以更推荐下面这位作者
(大佬)建立的 IP 地址大全:
Github地址大全raw.hellogithub.com/hosts
该项目的仓库地址:
GitHub520github.com/521xueweihan/GitHub520
2. 手动修改 Hosts 文件
hosts 文件在每个系统的路径如下:
Windows 系统:C:\Windows\System32\drivers\etc\hosts
Linux 系统:/etc/hosts
Mac 系统:/etc/hosts
2.1 修改方法
打开 hosts 文件,在文件末尾写入 查询到的IP地址 所查域名
即可,例如 140.82.112.3 github.com
Windows 使用管理员权限的记事本修改 hosts 文件
Linux、Mac 需要 root 权限:sudo vim /etc/hosts
2.2 激活生效
修改完 hosts 文件后,大部分情况下是直接生效,如果没生效可以尝试刷新 DNS:
Windows:在 CMD 窗口输入:ipconfig /flushdns
Linux 命令:sudo nscd restart
,如报错则须安装:sudo apt install nscd
或 sudo /etc/init.d/nscd restart
Mac 命令:sudo killall -HUP mDNSResponder
如果上述方法仍无效那就重启吧。
更加详细的修改 hosts 文件方法可以查看下面的链接
https://zhuanlan.zhihu.com/p/438447914
3. 自动更新 hosts 文件
3.1 周期性任务管理 cron
利用 crontab
建立周期性工作表,自动更新 Hosts 文件 ( 需要 root 权限 )。
crontab [-u <user_name>] -e
新建一个周期性工作表,省略 -u
则默认为当前用户,默认的编辑器是 vi
,编写完成后,会以当前用户名命名该文件,并保存到路径 /var/spool/cron/
下
crontab -l
查看工作表,其实质就是 cat /var/spool/cron/<user_name>
crontab -r
移除工作表
工作边在执行过程中的输出会发送到对应的 /var/spool/mail/<user_name>
中,如果不想看到输出,可以重定向 [Command] > /dev/null 2>&1
工作表的格式
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=user_name
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user_name command to be executed
0 */8 * * * root sed -i "/# GitHub520 Host Start/Q" /etc/hosts && curl https://raw.hellogithub.com/hosts >> /etc/hosts
上面工作表的内容是每隔8小时(*/8
)0分钟(0
),以 root
权限执行 sed
与 curl
命令
其作用是把网址 <https://raw.hellogithub.com/hosts> 中的内容以追加的形式插入到文件 /etc/hosts
中,插入点在 "# GitHub520 Host Start" 这一行。
如果觉得要执行的命令太长太复杂,也可以写成脚本执行,不过脚本路径最好写成绝对路径,防止执行过程中出现找不到的情况。
更多关于 crontab
的用法可以查看下面的网址:
Linux Crontab 定时任务www.runoob.com/w3cnote/linux-crontab-tasks.html
3.2 其他自动更新方法
在
的 GitHub520 项目说明书中,还介绍了使用 SwitchHosts 、AdGuard 、Chrome 插件等方式自动更新 hosts 文件的方法: