喜欢文章

修改HOSTS文件实现翻墙的原理及方法

2017-08-17  本文已影响4218人  936a6ae986e6

0、前言

       记得以前上网需要到墙外的时候,我总依赖于 VPN,比如蓝灯,赛风,总的来说这两款翻墙软件使用起来的相对简单,轻轻松松就翻到墙外。但缺点也很明显,比如他们的访问速度比较慢,偶尔也会抽抽风,有时候会出现不能使用的情况。关键的一点还是每个月都有流量限制,比如蓝灯每个月限制 800 M,这点流量用来查一些资料勉强能够支撑一个月,但是如果你需要看一些视频的话,那么你就只能付费了。因此,后来我也放弃使用VPN,直接使用 HOSTS文件翻墙。


读完本文,你将了解到:

一、 修改 HOSTS 文件实现翻墙的原理

二、 修改 HOSTS 文件实现翻墙的方法

三、 如何获取现成的 HOSTS 文件


一、 修改 HOSTS 文件实现翻墙的原理

1.1   当你输入某个域名并回车的时候,浏览器都帮你做了什么?

        想理解清楚修改 HOSTS 文件实现翻墙的原理,我们还得从这里说起,首先你要明白当我们输入某个我们想要访问的域名之后发生了什么?比如说我们现在想访问简书首页的话,那我们在浏览器上输入域名:http://www.jianshu.com/,这个时候,浏览器帮我们做了以下几件事:

第一步:域名解析

        穿梭在互联网上的数据包基本都是以 IP 包的形式,如果你想访问简书首页的话,那么你就需要 简书服务器的 IP 地址。因此,浏览器第一步要做的就是把你刚才输入的域名解析成服务器的 IP 地址。解析成 IP 地址并不是一步到位,他包括以下几个步骤:

        1) DNS 进程先检查浏览器程序的缓存(这里的缓存主要存放IP和域名的键值对,用于提高访问速度,将 IP 保存在内存中有助于下次需要时可直接使用,而不需要继续进行第二步),如果有[ http://www.jianshu.com/ ]所对应的 IP 的话,那么直接返回该域名的 IP 地址给浏览器。如果没有的话,则跳到 2)

        2) 检查本地的 HOSTS 文件( windows 系统下,HOSTS 文件存放的路径为: C:\Windows\System32\drivers\etc ,文件内部的存储结构如下,以键值对的形式存放着 IP 地址和域名,他们中间以空格隔开),如果有的话,则将查找到的 IP 地址告诉浏览器,并保存在缓存中,方便下次使用。如果还是没有的话,那么就必须请求本地 DNS 服务器了,跳到第 3 )。

       3) 检查本地的 DNS 服务器,如果本地 DNS 服务器中有该域名对应的 IP,那么直接返回,如果没有的话,则继续 4)。这个 DNS 通常是给你提供本地互联网接入的一个 DNS 服务器,即互联网的应用接入商,一般是电信或者联通。如浏览器缓存一样,这个 DNS 服务器中也有自己的缓存,他会把每次向上级服务器申请得到的域名即 IP 地址保存在自己的缓存中,以便下次如果有相同的申请的话可以直接返回。

       4) 如果在本地的 DNS 服务器中仍没有查找我们想要的 IP 地址的话,那么直接到 Root Server 域名服务器即根域名服务器中请求解析。根域名服务器返回给本地服务器一个所查询到的主域名服务器IP地址,本地服务器再层层返回直到IP地址落入浏览器的手上,那么本次的域名解析结束。

1.2  我们为什么上不了外网?

        看到这里你也许会有个疑问,既然 Root Server 总会返回一个IP地址,也就是说我们能与想要访问的服务器建立连接,那为什么我们还需要翻墙上外网呢?这一切还是 Great FireWall(防火长城)的功劳,具体是什么请自行百科。下面简单介绍下 Great FireWall 几个简单的工作原理:

        1) IP封锁 :IP封锁是指防火墙中维护一张IP黑名单,一旦发现发有黑名单中地址的请求数据包,那么就直接将该包丢弃,这也导致了我们的请求得不到目标主机的及时响应而引发超时,从而达到屏蔽对目标主机的访问的目的。

        2) DNS污染 : 域名服务器缓存污染,又称域名服务器缓存投毒,是指一些刻意制造或无意中制造出来的域名服务器封包,把域名指往不正确的IP地址,你可以理解为本来我想访问的是简书的首页,那么他应该返回给我一个简书首页的IP地址,结果他却给我返回一个新浪首页的地址。一般来说,在互联网上都有可信赖的域名服务器,但为减低网络上的流量压力,一般的域名服务器都会把从上游的域名服务器获得的解析记录暂存起来,待下次有其他机器要求解析域名时,可以立即提供服务。一旦有关域名的局域域名服务器的缓存受到污染,就会把域名内的电脑导引往错误的服务器或服务器的网址。

        通过以上的两个技术,其他还有其他一些技术,如果有兴趣可以自行百科,当我们发送某个国外网站的请求的时候,DNS服务器总会返回给我们一个错误的IP地址或者这个请求被丢弃导致timeout,我们也因此无法访问国外的网站。

二、 修改 HOSTS 文件实现翻墙的方法

        前面的域名解析部分已经讲得很清楚了,假如我们想访问一个外网的域名如【 www.youtube.com 】,如果我们不修改 hosts 文件的话,那么这个解析过程就必须经过一个以上的  DNS 服务器,那么返回给我们的总是一个错误的 IP 地址,也就是说你永远访问不了外网,永远被关在墙内。那么如果我们想到墙外的话,我们就必须抢在第三步之前,即在第二步中,我们在 hosts 文件中添加这个域名所对应的IP地址,当我们需要访问这个域名的时候,我们就有了指向目标服务器的正确 IP 地址,即我们可以访问这个域名对应的服务器(前提你添加的 IP 地址也要正确)。说了这么多,我们下面来做一个简单的例子:

在没有修改hosts文件之前,如果我想访问 www.youtube.com 网站的话,会出现以下这个结果:

我们可以看到的是,我们根本无法访问这个网站。那么,按照刚才的思路,我们往 hosts 文件中添加一行: 216.58.200.192  www.youtube.com 


        保存之后,神奇的事情就发生了,我们可以正常访问 youtube 主页了。原理其实也很简单,就是上面我们所说的当第一步没有关于 www.youtube.com 域名对应的缓存的时候,于是到第二步hosts文件中去查找,因为hosts文件中存在 www.youtube.com 的IP于是返回告诉浏览器,这时候我们就不用到第三步和第四步去查找,也就不会发生DNS混淆了,我们也就能正确访问youtube主页。

        同理,当你想访问其他网站因为墙的问题而访问不了的话,那么你可按照上面的步骤,到网上搜到该域名对应的IP,然后添加进 hosts 文件即可。

注意:

         当你修改了 hosts 文件的时候, 你必须以管理员的身份在命令行中输入 ipconfig /flushdns 来刷新 DNS 解析缓存,不然有可能缓存中存在的错误的映射关系使你访问不了你想访问的页面。前面解析域名的时候我们说过,第一步中程序缓存存在着之前访问过的域名的IP,如果你更新了 HOSTS 文件而不刷新缓存的话,那么你此次更新还是无效的,得等到你下次刷新 DNS 缓存的时候。


如何获取某个域名可用的 IP

关于这点,其实查找起来是比较困难的,至少我用的方法是这样,如果你有更好的办法,欢迎私信告诉我。下面我们以 www.youtube.com 为例:

1. 第一种比较简单的方法,进入命令行,输入 nslookup -vc www.youtube.com 8.8.8.8(如果你想查找别的域名,替换掉域名即可),这个时候,显示的结果如下:

我们看到 Addresses 行,如果你用的是学校的网的话,那么二话不说你直接可以将第一行的IPV6 地址写到 hosts文件 中,格式同 IPV4 的一样,这样子一定可以运行。

如果你不是教育网的话,那么就得把下面的 IPV4 地址一个一个试了,因为并不是每个 IP 都能用的,有的可能被封掉了,那么你如何判定一个IP可用呢?

telnet + IP + 443 端口,如何页面跳到一个黑色的页面,那么恭喜这个 IP 是可用的,如果无法打开到主机的连接,那么这个 IP 为不可用,你只能试试别的,下面我来演示一下:

        我们测试到 74.125.23.138 地址不可用,那么我们也没必要将他添加进 hosts 文件中。我们可以试试其他的几个,但是经过测试这几个 IP 都是不可用,我们只能从其他途径获取其他 IP。我经常去的网站是  ping.chinaz.com ,输入你想访问的域名,如  www.youtube.com,那么下面会出现一些 IP , 一般超时的话表示这个 IP 对于我们来说不可用,我们必须找其他有响应的 IP 地址,重复 telnet 操作,直到找到能用的 IP . 我们找到其中一个可用的IP :

        telnet 一下,如果出现以下黑色的页面,那么就说明这个IP是可用的,你只需要将这个IP和对应的域名写进 hosts 文件即可。

以上即为查找可用 IP 的简单介绍。

三、 如何获取现成的HOSTS文件

        有时候你也许会觉得,我只是想翻个墙,上个 youtube 看看视频,上上 Twitter 发发推特,并无其他需求,就这么麻烦?那我还不如直接花钱买个 VPN 算了。是的,没错,有时候找个能用的IP的确很困难,确实要花掉我们很多时间,我们还不如把时间花在正确的事情上。但是,网上也有很多别人已经收集好的 IPV6 文件和 IPV4 文件,他们会不定期更新这些文件,确保当一些 IP 被封掉之后替换成别的能用的IP。你要做的工作也很简单,就是当发现某个网站上不了的话,去更新一份新的文件就行。

在这里我主要介绍两个网站,一个关于 IPV6 的 hosts 文件,另一个关于 IPV4 的 hosts 文件,如果你当前网络支持 IPV6,建议用 IPV6,如果不支持可以用 IPV4.

关于 IPV6: https://github.com/lennylxx/ipv6-hosts/blob/master/hosts ,你只要将页面复制下来然后粘贴在你的HOSTS文件上就行,记住以管理员的身份打开。

关于 IPV4: https://laod.cn/hosts/ ,进去之后找到最新更新的那期,然后下载下来,打开压缩包之后找到里面的可执行文件,根据提示替换掉你原来的hosts文件就行。

记住替换好了之后要刷新一下 DNS 缓存,即在命令行下执行: ipconfig /flushdns 。

上面的两个文件能满足你正常的上网需求,而如果你遇到不可以上的网,那么就按照上面提到的方法在 hosts 文件后面添加你想要上的 IP,能满足你日常的一切需求。

上一篇下一篇

猜你喜欢

热点阅读