首页 面向新手的Git教程:打不开GitHub?
文章
取消

面向新手的Git教程:打不开GitHub?

最近甲流横行,我也不小心中招了,今天请了一天假在家休息,正好水上一篇公众号……

不管在学习阶段还是工作阶段,软件开发人员都不可避免的会接触到 GitHub。GitHub 作为全球最知名的开源社区,其服务器上托管了无数的 Git 仓库。

不知道从何时起,GitHub 在大陆地区是否可以直接访问就成了一个迷。第一次访问打不开,可能刷新一下就又能打开了;可能移动的网络打不开,换联通的网就又能打开了;即便是同一家运营商,可能在这个省能打开,在另一个省就打不开了……当我们要着急从 GitHub 上克隆一个仓库却又正好打不开他们的网站时,既会浪费我们宝贵的时间,又会影响我们美丽的心情。

所以今天我在这里介绍一种低成本的可访问 GitHub 的方法。

科普 DNS

考虑到本公众号以前的定位和受众,这里有必要科普一下 DNS。老鸟请直接跳过本节。

我们在浏览器中访问一个网站时,使用的是 HTTP(或HTTPS) 协议,HTTP 协议是 TCP/IP 协议栈中的一个应用层协议,在 TCP/IP 协议栈中,两个主机之间建立连接时,首先要知道对方的 IP 地址。

因为 IP 地址比较难记,所以就有了域名来帮助我们减少记忆难度。比如我们要访问腾讯的网站,我们不需要记住腾讯服务器的 IP 地址,我们只需要记住“qq.com”这个域名即可。我们在浏览器的地址栏中输入https://qq.com/后,操作系统会自动帮我们完成域名到 IP 地址的转换。

钓鱼网站是一类高度模仿官方网站的网站,好一点的钓鱼网站可以做到和官方网站一摸一样,让受害者误以为正在访问官网,然后输入用户名/密码或其他敏感信息导致敏感信息泄露。但只要能记住官网的域名,钓鱼网站就可以一眼分辨了,因为钓鱼网站的域名和官网的肯定不一样。

将域名转换为 IP 地址就用到了 DNS 服务器,DNS 服务器就像一个字典,里面记录了各域名到 IP 地址的映射。

不同的 DNS 上面对同一个域名记录的 IP 地址可能不一样,像 GitHub 这种大型网站会在多个地区部署服务器,然后配置 DNS 返回离你最近的服务器的 IP 地址。

检查 DNS

所以我们只需要先得到一份 GitHub 在不同地区配置的 IP 列表,然后从其中找到本地电脑可以访问的服务器 IP 即可正常访问 GitHub!

我们以dnschecker.org为例,这是一个可以查询不同地区的 DNS 记录的网站,打开这个网站后,在输入框中输入github.com,点击搜索:

DNS Checker

这样我们就得到了一份 GitHub 服务器 IP 的列表。

检查可访问性

有了服务器 IP 列表,下一步就是检查哪个服务器能连上,因为 HTTPS 协议的默认端口是 443,所以我们只需要判断是否可以建立和目标服务器的 443 端口的 TCP 连接即可。这类工具有很多,比较常用的有telnetnetcat。如果你的电脑上没有这两个命令可以选其中一个进行安装。

telnet

使用 telnet 工具时

# 用法为 telnet 目标IP 目标端口
telnet 20.205.243.166 443

如果输出内容中有连接失败,则为不可访问:

1
正在连接 20.205.243.166... 无法打开到主机的连接。在端口443:连接失败

如果输出内容如下,则可访问:

1
2
3
Trying 20.26.156.215
Connected to 20.26.156.215
Escape character is '^]'.

netcat

使用 netcat 也是同理:

# 用法为 nc -zv 目标IP 目标端口
nc -zv 20.205.243.166 443

如下输出为不可访问:

nc: connectx to 20.205.243.166 port 443 (tcp) failed: Operation timed out

如下输出为可以访问:

Connection to 20.26.156.215 port 443 [tcp/https] succeeded!

修改 hosts

现在,我们找到了一个可以访问的 IP 地址(20.26.156.215),只需要在系统的 hosts 文件中为github.com配置为20.26.156.215即可。

hosts 文件的作用类似于 DNS,在 hosts 文件中为指定域名配置 IP 地址后,访问该域名将不再走 DNS 解析,直接使用 hosts 文件中配置的 IP 地址。

Windows 系统中 hosts 文件位置为:C:\Windows\System32\drivers\etc\hosts,macOS 系统中 hosts 文件位置为:/etc/hosts

这里需要注意权限,在 Windows 中编辑 hosts 文件时,需要使用管理员权限运行编辑软件。同样在 mac 中也需要使用sudo提升到 root 权限才能修改 hosts 文件。

在自己系统的 hosts 文件中添加:20.26.156.215 github.com并保存后,在浏览器中就可以正常访问 GitHub 啦。

刷新 DNS 缓存

如果还是不能访问,可以尝试一下刷新电脑的 DNS 缓存。

Windows 执行:

ipconfig /flushdns

macOS 执行:

sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
本文由作者按照 CC BY 4.0 进行授权

面向新手的 Git 教程:像玩游戏一样用 Git

面向新手的Git教程:Git 的文件状态