如何访问 Github
由 familyboat
3 分钟阅读
作为一名开发人员,需要经常访问 GitHub 提供的服务。在中国,直接访问 GitHub 提供的服务一般是不可能的。
偶然发现无法访问 GitHub 提供的服务是因为 DNS 欺骗。
接下来探讨相应的解决方法。
访问网站
无论是在浏览器中,还是在终端中,访问网站提供的服务时,一般会涉及下列这些步骤:
- 域名解析:向域名服务器发送请求,询问网站域名对应的 IP 地址;
- 建立 TCP 连接:和目标服务器(IP 地址指向目标服务器)建立 TCP 连接;
- 发送 HTTP 请求:向目标服务器发送 HTTP 请求;
- 处理 HTTP 响应:处理从目标服务器发送的 HTTP 响应。
如果域名解析阶段得到的 IP 地址是错误的,那么后续的步骤都将会是错误的。
域名解析
域名解析一般涉及下列这些步骤:
- 检查 hosts 文件:查看 hosts 文件中是否存在该域名的 IP 地址映射,如果存在,则返回该 IP 地址;
- 操作系统缓存查询:调用 DNS 缓存查询函数,查找缓存中是否存在该域名的 IP 地址,如果存在,则返回该 IP 地址;
- 域名服务器查询:向域名服务器查询该域名的 IP 地址,返回解析到的 IP 地址。
一般而言,hosts 文件中没有任何的 IP 地址——域名的映射。如果操作系统缓存中没有该域名的 IP 地址时,就需要向域名服务器发送查询请求。如果域名服务器返回的结果是虚假的,那么后续的步骤都是错误的。
因此,可以先获取该域名真实的 IP 地址,然后在 hosts 文件中加入 IP 地址——域名的条目。
如何获取域名真实的 IP 地址
用 deno 运行时提供的 Deno.resolveDns
接口实现域名解析的功能,并将该功能以 Web 服务的形式托管在 deno deploy 上。想要了解更多详情,参见源码仓库。
获取域名真实的 IP 地址的服务位于 https://domain-name-to-ip.deno.dev/domain_name/:id(将 :id
替换为你想要查询的域名)。
如何在 hosts 文件中加入 IP 地址——域名条目
hosts 文件的位置在不同的操作系统有所不同。在 Windows 中位于 C:\Windows\System32\drivers\etc\hosts;在 Linux 中位于 /etc/hosts;在 macOS 中位于 /etc/hosts。
打开 hosts 文件,将 IP 地址——域名条目添加到文件中。
Note
修改 hosts 文件需要管理员或 root 权限。
示例
下列的示例首先获取 github.com 真实的 IP 地址,然后向 hosts 文件中添加相应的条目,提升访问 GitHub 服务的用户体验。
- 访问 https://domain-name-to-ip.deno.dev/domain_name/github.com 获取 github.com 真实的 IP 地址;
- 打开 hosts 文件,添加 20.205.243.166 github.com(IP 地址以你看到的为准);
- 在命令行中输入
git clone <your repository>
。
总结
在访问某个网站提供的服务时,如果发现无法正常访问,可以排查一下是否是因为 DNS 欺骗,如果是,可以尝试本文中介绍的解决方法。
许可
This work © 2024-12-1 by familyboat is licensed under Creative Commons Attribution 4.0 International