十二月 2014

2014年12月22日星期一

不懂代码也会写HOST!


(一)利用CHROME找出被屏蔽的网站域名

首先要说的是,本篇文章适用于计算机初学者——有一定基础,但代码苦手。诚然,若是会一点代码,干这些事情会方便很多。但我的目的是希望能够更多的人翻墙——从imouto.host开始到现在,这个想法,始终未变。

一般来说,若是你撞墙了,一般会是这个样子:

或是这个样子:

那么若是想通过Host大法破解,第一步则是需要找到被干掉的域名。当然,你若是会抓包,甚至会架代理服务器之类的,那么不管什么设备,分析出域名访问都轻而易举——当然您也不必往下看了。既然是给计算机初学者的教程,自然就来点简单的。

如果这个网页完全无法打开——就如本篇文章开篇的效果一样,很明显,你知道就是那个域名被干掉了。这个大家都知道。比如你看到了"由于 google.com 响应时间过长……"那么你就会把 google.com加入到你的Host域名表中了。

当你通过Host解决了这一个域名之后,F5刷新,你会发现,页面打开得并不完整,或者速度很慢——这是因为,一个页面中包含了很多元素,但这些元素往往都是放在了不同的域名中,那么如何找出当前页面中所有需要写入Host的域名呢?让我们在Chrome下按下F12键呼出控制台,选择NetWork标签,再按下Ctrl+F5(忽略缓存强制刷新):

你可以看到,被红色高亮的,就是页面中载入错误的元素。复制载入错误的元素的URL,就可以得到被墙的域名。比如这里的两个域名就是 s0.wp.com 和 stats.wp.com 。同时,通过分析Status一栏的错误代码你可以得知载入错误的原因(比如若是404的话其实真的就是服务器反馈页面未找到,若是真被墙了不会有404反馈的),大家可以访问维基百科中HTTP状态码的词条来学习更多的知识。顺便:点击Status标题栏可以排序HTTP状态码,让当前页面载入错误的元素排至最前端。

这个步骤往往在你制作Host的过程中要重复多次,随着页面元素一点一点的被Host修复,另外一些页面元素载入错误也会随之浮出,请保持耐心。

下面讲一个进阶的方法,是我在制作维基百科Host段过程中发现的,希望大家能够做到举一反三。

首先在Chrome下查看某个网站的证书,在下图中点击"证书信息":

然后点击:详细信息→使用者备用名称:

看到下面那个框了吗?统统复制!这个招数在未来,在分析某个IP承载了哪些域名时,也会用到。

OK,今天就到这里,下期我将会讲到不懂代码的你如何快速找出Windows和Android应用程序用到的域名,敬请期待。然后就是,这个系列可能会写很多期,大概得连载到春节吧……请原谅我的拖延症,薪水低到爆,工作忙成狗,希望能有伯乐能速速解救我于水火……

————————————————————————————————————————

(二)如何找出WINDOWS和ANDROID应用程序所使用的域名

对于一般的Windows应用程序来说,Chrome的方法自然是没用。说到底,找域名的终极方法就是想办法把网络访问日志抓出来,那么我们就可以想想,Windows下有什么可以抓日志的软件呢?不少防火墙都有日志功能,但还得再装个软件……这里有个更简单的方法,而且不少经常翻墙的朋友都有安装,我们可以马上拿来用,就是GoAgent。

首先想办法让你的GoAgent能够正常使用,不管是改配置文件甚至是在VPN后跑GoAgent都可以。

然后就是想办法让你的目标应用程序跑在GoAgent下。大多数Windows应用程序都支持设定代理服务器,或者干脆使用IE代理:

然后让你的目标应用程序跑起来,GoAgent就会输出日志:


(屏蔽了一些可能泄露隐私的东西。)

从日志中可以清楚地看到应用程序所使用的域名,记录下来——可能需要手打。若日志跑得太快,请配合截图。

  • Android

早些时候我都是靠抓包来出Android域名表的,后来实在受不了了,便公开征求了一下方案,有人推荐了"AdAway",中文名叫"广告走开"——很多朋友也使用它同步Host文件。

那么首先在你的Android设备上安装AdAway:GitHub(源码)F-droid(应用市场)酷安(应用市场)。记住,这货需要ROOT。

以下使用民间汉化版作介绍,英文版请自己对照。首先打开AdAway,在菜单里选择"记录DNS请求":

然后启动TCPdump:

启动完毕后,便可以让它在后台默默运行了。这时我们回到启动器,随便启动一个被墙的APP比如FaceBook或者Twitter之类。当然,如果你没有翻墙的话,是运行不起来的。这时我们回到AdAway,打开日志文件:

域名出来了。

需要注意的是:1,这里只会记录DNS请求,如果一个域名已经在host里有对应的IP,那么系统是不会进行DNS请求的,TCPdump也不会记录。2,过程虽然简单,但收集一个APP完整的所需域名的清单,可能需要你多次重启手机,请务必保持耐心

  • 拾遗

一些收集域名中可能用到的小技巧会写在这里,未来可能会有更新:

当你看到一个域名,比如clients2.google.com,那么你应该会想到还有clients1.google.com或者clients3.google.com,在墙外Ping一下试试能不能解析。
两个监控网络的小工具,我一直在用,功能值得大家探索:Windows上的IP雷达,Android上的OS Monitor。虽然同类软件有很多,但这两个免费,小巧,不流氓。

————————————————————我是萌萌哒分割线————————————————————

(三)如何查找某个域名的可用IP

文章开始之前,说一个事:如果在文章中有某个方法我没讲到,那么可能是两个原因。一是这个方法众所周知,二是这个方法对于初级用户难度太高。如果你愿意分享,可以自己写一篇文章。就这样。

  • 通过域名查找IP

上两篇文章我们讲解了如何找到被封锁的域名,那么现在就得从域名中找出可用的IP地址,然后再写入Hosts表中。

一般来说,查找域名对应IP最简单的方法就是ping命令,可惜我们这么做似乎行不通……那么,就让别的地区来ping吧!以下提供若干网站:

https://cloudmonitor.ca.com/zh_cn/ping.php (默认IPv6,如果需要IPv4可以试试下面这个。)
https://cloudmonitor.ca.com/zh_cn/traceroute.php
http://www.webkaka.com/Ping.aspx
http://www.17ce.com/
http://www.super-ping.com/sc.html ( 无法加密,使用时可能因为关键字被Reset,因此建议先翻墙后使用。)

这类网站有很多很多很多,总之你能够通过越多的地区ping出一个被封锁域名的IP,那么最终成功率就越高。

那么我现在以 http://www.super-ping.com/sc.html 来做个示范(注意翻墙过去ping,否则可能会被关键字Reset),比如这里我们 ping google.com :

哇 ping 出来了好多IP,那么哪个是能用的呢?有人说我有专门的工具,有人说在本地ping一下就可以了。但如果我告诉你一个更简单的办法呢?

比如我们这里选了一个IP地址74.125.230.64,那么我们先让电脑回到墙内,再新开一个Chrome窗口,在地址栏输入:https://74.125.230.64/

好吧,这个IP不能用,我们换一个https://173.194.41.41/

证书错误页面的出现,说明这个IP地址能用,把它记录下来吧。

这个方法比起单纯ping来说最大的优势就是可以忽略针对端口的封锁(仅检测443端口),因此比单纯ping来验证IP可用性更靠谱。

  • 筛选最优IP地址

收集到了很多可用IP后,我会尝试从中选择一个速度较快的。一般来说大家在筛选速度更快的IP地址时使用的是ping,然后对比多个IP之间的延迟。但这不够,除了延迟,我们还应该更看看带宽。延迟和带宽两个指标结合才能判断一个IP是否健康。

打开这个网站(其它类似网站请自己发掘):http://www.webkaka.com/webCheck.aspx ,然后在网址栏中填入要测速的IP。这里仍然用刚才找到的一个 google.com 的IP 173.194.41.41 ,但请注意格式:https://173.194.41.41/ 。

从图中可以看到这是一个很健康的IP。

我们可以关注以下栏目:

"状态"栏:有多少区域无法访问,但实际上可能并不是无法访问而是单纯的测速提供商故障了。如果无法访问的区域太多,那么就可能因为这属于随机封锁/局部封锁而需要考虑弃用这个IP。
"内容下载速度(KB/s)"栏:各个地区的下载速度,可以了解联通更快还是电信更快之类。
图表"下载速率":可以看到并计算下载速度分布和平均指标,多个IP地址间比较速度也多使用这个指标

其它指标请自己发掘。

  • 所有可用IP都被封锁了!

当你手头所有工具都ping不出可用IP的时候,我们就得想办法找出其它IP了,这个时候运气成分比较重要。鉴我们不应该盲目地去寻找,也不应该随便就使用其它类似域名的IP地址。鉴于证书和服务器内容问题,这可能并不会让你更轻松,有的时候反而会增加后期维护的难度。比如之前有一个IP地址用于Gmail时,测试初期一切正常,但实际使用时才发现无法打开Gmail联系人,这就是一个典型的服务器内容问题,但当你遇到问题的时候,往往很难判断是哪里出故障了。

对于谷歌来说,当你看到 74.125.230.64 的时候,我们就应该会想到 74.125.231.64 是不是能用,那么 74.125.232.64 呢?然后你可以拿你联想到的IP挨个用以上方式测试。不过哪怕是测试通过,我们也应该谨慎使用这类IP,因为毕竟不是ping出来的,这样使用并不是被网站官方所希望的,很可能会出现严重后果,所以一定要严格测试。以下将官方ping出来的IP称为"官方IP",其它IP为"非官方IP"。

我们可以轻松做到的测试方式:

1,对比官方和非官方IP的证书,方式在《不懂代码也会写HOST!(一)利用CHROME找出被屏蔽的网站域名》一文末尾有提到。若是证书完全相同,那么很大可能服务器内容也是相同的。另外,通过这种查看证书的方式,还可以看到该IP承载了哪些域名。
2,对于很多网站,包括但不限于谷歌、脸书、推特,IP越相似,那么服务器内容越可能相同,例如74.125.230.64、74.125.231.64、74.125.232.64等。
3,最保险的方法:把你的非官方IP部署进测试环境的Hosts,然后做尽可能多的测试。确认无误后,再部署进生产环境。

————————————————————我是萌萌哒分割线———————————————————