Do more! Do better!

关于hosts文件

Posted on By zjk

最近朋友圈里又火了某游戏,即便我不玩也略知一二。值得吐槽的是origin平台的下载速度令人难过,不过与此同时也冒出很多教程解决这个问题,很多论坛上都看得到,主要都是基于修改hosts文件。
其实好多时候都遇到修改hosts文件的情况,但是一直没去详细了解其原理,今天顺手查了一下其实蛮简单的。

hosts是什么

Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。
需要注意的是,Hosts文件配置的映射是静态的,如果网络上的计算机更改了请及时更新IP地址,否则将不能访问。
(来自百度百科)

说了挺多,其实就是规定一个确定的域名解析嘛。

为什么有用

为什么规定解析能加速或者有的时候可以部分实现”翻墙”呢?
不得不提到神奇的GFW(Great FireWall)。在 GFW 的 5 种封锁方法中,有一种简单而效果很好的方法是 DNS 污染。GFW 会对 DNS 的解析过程进行干扰,这会使对某些被干扰的域名返回一个错误的 IP 地址给你的主机,使你无法正确连接到你要的服务器上读取正确的信息。
根据前面的说法,Hosts 的请求级别比 DNS 高。当你的 Hosts 文件里面有对应的 IP 时,它就会直接访问那个 IP,而不用通过 DNS。所以IP 放入 Hosts 文件后,就可以跳过 DNS 的解析这一步,直接就行 IP 访问,不受 GFW 的 DNS 污染干扰了。
当然 GFW 还有IP 封锁等更多的方法,翻墙没这么简单。说起来我有点想详细了解一下关于GFW的原理。

存储位置

hosts文件在不同操作系统(甚至不同Windows版本)的位置都不大一样,
以下为hosts文件在不同系统中所处的目录
Windows XP/2000/Vista/7/8/8.1/10:C:\windows\system32\drivers\etc\
(XP系统无法使用bat批处理命令直接替换hosts,需手动替换后重新插拔网线或重启方使hosts生效)
(可更改\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath项修改host位置)
Windows 95/98/Me:%WinDir%\ (其实就是C:\WINDOWS)
Linux及其他类Unix操作系统:/etc/
Mac OS 9及更早的系统:System Folder: Preferences或System folder(文件格式可能与Windows和Linux所对应的文件不同)
Mac OS X:/private/etc(使用BSD风格的hosts文件)
Android:/system/etc/
iPhone OS:/etc/(需要越狱)
iPad OS:/private/etc

一些事项

网上浏览到的内容,mark一下。
1.为什么 Hosts 的 IP 要时不时更改,为什么 FB、Twitter 会仍旧上不去。是因为 GFW 的第二个大招,IP 封锁。比如访问国外一个 IP 无法访问,Ping 不通,tracert 这个 IP 后发现,全部在边缘路由器 (GFW) 附近被拦截。换言之,GFW 直接拦截带有这个 IP 头的数据包。所以,如果你更改的 IP 被封锁了,就算你过了 DNS 这一关,也仍旧不能翻过 GFW。
2.再补充一条,虽然很多大的互联网公司的IP地址是不会随便变更的,但是也不排除变更的可能性。如果你在hosts文件中做了某网站的映射:A.com 9.9.9.9,而恰巧这个网站的IP地址变更为:8.8.8.8,这时系统会访问错误的IP地址。如果别有用心的人分配到了:9.9.9.9这个IP,做了一个A.com仿冒的网站,你还在当做正常网站在访问,那你的账号密码可能就被偷了。