Pages

Wednesday, 20 February 2013

Fiddler:监视哪些连接被重置

经常翻墙的人想必都知道 gfwlist。这个列表里有几乎所有被 gfw 认证了的网站/网页。有了这个列表,我们的翻墙事业如虎添翼。但是这个列表也有些缺陷,有时候还是会遗漏一些网站。当然,由于各地 ISP 也有一个自己的 gfw,这个列表无法做到全国统一,遗漏也是在所难免。我最近找到了一个软件,可以监视到自己的电脑上每一个连接的详细信息,包括服务器返回的 HTTP 状态码。有了这个软件,我们就能找到那些没有被 gfwlist 收录但被 gfw 认证的网站了。

  当然,对于某个特定的网站,要看它有没有被认证,也不用软件监视,以下几个网站就能帮你判断了:

Test if any website is Blocked in China
Website Test behind the Great Firewall of China
Great Firewall of China

  但是要更加强大、适用范围广、效率更高的方式的话,就必须使用这款软件来搞定了。它就是 Fiddler,MSDN 上也有介绍,链接在此:

Fiddler PowerToy - Part 1: HTTP Debugging

  看到这个软件的界面就知道它的功能非常强大。只要是 HTTP 请求的事情,没有它不知道的。其实最近 nirsoft 也出了一个类似的软件,叫 HTTPNetworkSniffer,不过据我试用了一下后发现,HTTPNetworkSniffer 居然不记录那些返回错误的请求,我才另外搜索一番,找到了 Fiddler 这款软件。
  Fiddler 其实是一个代理服务器,它启动后会自动修改系统的 WinInet 代理,退出后又自动还原到原设置。Internet Explorer 也是通过 WinInet 代理连接互联网。其他“使用与 IE 相同的代理设置”的软件,就是走了 WinInet 代理。像 Firefox 的代理不与 IE 互通,用的就不是 WinInet。因此如果要让 Fiddler 监视 Firefox 的连接的话,需要另外将 Firefox 的代理服务器设置为 127.0.0.1:8888。
WinInet 和 Fiddler 的位置

  Fiddler 启动后就开始监视每个连接的状态。界面如下图所示:



  每一行就是一个客户端到服务器的 HTTP 请求。我们最关心的是“Result”这一列。这一列的值就是“Host”服务器针对“URL”所示请求而返回给客户端的状态码。一般正常的话应该是 200,也有其他状态码,见本文后面的参考链接。这时如果访问一个结构比较复杂的页面比如 facebook 的首页,那么 Fiddler 的界面中就会出现一大堆连接信息。我们只关心哪些连接被重置,所以需要稍微过滤一下结果:

如图所示,勾选“Use Filters”并勾选隐藏正常结果

  然后再看主界面,留下的就都是错误请求了:

Result=504,基本上就意味着被 Reset 了
  接下来,把这些被重置的 Host 加入代理,或者加入自己的 hosts 解析,就能不被 Reset 了。至于每个 HTTP 状态码的意思,可以看维基上的说明。以下两个地方也有,可以补充着参考:
http://www.google.com/support/webmasters/bin/answer.py?answer=40132
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

  本文只是一个最基本的介绍,实用性不太强.