页面

2012年1月14日星期六

Fiddler:与 Chrome 配合工作

关键词:reset, chrome, gfwlist, SwitchySharp, Fiddler

  上文大约介绍了一下 Fiddler 的功能,以及与 Internet Explorer 配合的使用方法。要利用 gfwlist 实现自动代理,我们一般都使用 Firefox 或者 Google Chrome 配合相应的插件来上网。以下以安装了 Proxy SwitchySharp 插件的 Chrome 为例说明如何更方便地使用 Fiddler。

  一个典型的 SwitchySharp 的设置方案如下:


  这种设置方案下,只有 gfwlist 和部分自己另外指定的几个网址会走 19840_base 的代理服务器。其他的就属于默认规则,走的是 [直接连接]。我们在“情景模式”标签下新建一个“Fiddler”的场景,如下图所示:


  然后回到“切换规则”标签,将默认规则的情景模式改为“Fiddler”。如下图所示:


  保存之后,其他网站就都走 Fiddler 代理了。然后访问一个 gfwlist 中没有的网站,Fiddler 就能监视这些网站的状态码了。如图:

  可以看出,a3.twimg.com 这么高调的网址就没有被 gfwlist 收录。

  以上其实不是本文的重点,上面说的方法并没有多少技术含量。其实使用 Chrome 的同学要检查请求的返回状态码的话,还有两个更简单的方法,虽然和标题无关,也一并放到这里吧。

  其一,在访问了某个网站之后,打开 chrome://view-http-cache 页面,就能看到请求一览了,如图:


  点击各个链接,就能查看该请求的详细信息,有返回状态码,返回值等等。如图:



  这种方法虽然没有 Fiddler 直观,但也不失为一个轻量级的解决方案。

  其二,使用 Chrome 自带的开发人员工具,也可以直观的看到请求状态。打开某个网站后,如果发现被 reset,那么从扳手菜单的“工具”中启动开发人员工具,定位到“Network”标签下,然后刷新一下页面。这时“network”下面就会显示当前的 http 请求和请求结果。如果点开左下角的“Open Console.”按钮的话,还能看到更详细的出错信息。如图:



  由此可见,没有被 gfwlist 收录的网址 zynga2-a.akamaihd.net 就被屏蔽了。

使用Facebook社交插件参与评论:

2011年12月27日星期二

Fiddler:监视哪些连接被重置

关键词:gfw, reset, fiddler, ipv6-hosts, 连接重置

  经常翻墙的人想必都知道 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

  本文只是一个最基本的介绍,实用性不太强。下一篇文章打算介绍一下 Fiddler 和 Chrome 浏览器 + Proxy SwitchySharp + gfwlist 配合使用的场景,还有使用 Chrome 自带的工具查看请求状态码的方法。

使用Facebook社交插件参与评论:

2011年12月26日星期一

娉娉袅袅十三余,豆蔻梢头二月初

  最近有一个密码在网上流传的很火,说是从 CSDN 数据库里找到的史上最强密码,就是【ppnn13%dkstFeb.1st】。

  自 CSDN 数据库泄密以来,各家博客都在撰文写密码安全。当我看到这个密码,发现一个完美的密码也不过如此了。看看这个密码有多强:

包含小写字母:yes
包含大写字母:yes
包含数字:yes
包含标点符号:yes
长度:足够,18位
英文单词:简单的单词没有,Feb. 和 1st 算两个
拼音:没有完整的拼音,只有声母
生日、手机号、QQ号等其他个人信息 :no

  更难能可贵的是,满足如此苛刻条件的密码,居然还有一个优点:容易记忆!明眼人只要看过一眼“娉娉袅袅十三余,豆蔻梢头二月初”的词句后绝对就牢记于心了。

  可惜了这么好的一个密码,被 CSDN 给废了。不过也给大家提供了一个思路。按类似的要求去想,一定还能找到既足够复杂又容易记忆的密码的。

使用Facebook社交插件参与评论:

2011年11月6日星期日

IPv6心法第三层:IPv6组网

关键词:IPv6, tunnelbroker, networking, 组网, Windows 7, IPv6 路由器

本文副标题:将一台 Windows 7 电脑配置成 IPv6 路由器

  本文乃 IPv6 心法(互联网通信协议第六版穿墙心法,以下简称心法)第三层要义。标题有些不太严肃,但是用在中国还是比较贴切的。要看懂心法第三层,需要有第一层和第二层的基础。

心法第一层:Teredo,见 Windows 7,中国电信ADSL的环境下配置IPv6
心法第二层:TunnelBroker,见 windows 7 下使用tunnelbroker 服务配置IPv6
心法第三层:Networking,即本文 IPv6心法第三层:IPv6组网

  对于打通了心法第二层的人来说,Hurricane Electric 旗下的 tunnelbroker.net 提供的一个 /64 全球可路由网段还是非常诱人的,只用一个 endpoint 未免太浪费了。另外,在同一个 IPv4 局域网中,只能有一个 tunnelbroker.net 的通道。所以,要让局域网的每台设备都能有一个全球 IPv6 地址,就必须使用这个 /64 网段了。

  在 tunnelbroker.net 的通道的详细信息页,点击 Routed /64 旁边的 i 状图标,会有一个提示层曰:
We automatically assign a /64 to your account and route it via:
ipv6 route [routed64] [clientV6Endpoint] 
This allows your endpoint device to operate as the router for this netblock and allows you to utilize DHCPv6 or RADVD to hand out IP's from this allocation to your internal network. 
If you have more than one network segment please consider utilizing the /48 above.
提示我们可以用该网段配置自己的内部网络。但是,中文网络中有关这个网段的用法的文章非常少,最后还是在官方论坛中找到了解决方案。大家可以去官方论坛里的 Windows 板块看看,有很多有用的信息:http://www.tunnelbroker.net/forums/index.php?board=5.0。详见文章最后的参考。我实践了一下这个方案,有了一些经验,写下供大家参考。


  我们要建立一个 IPv6 网络,需要配置 IPv6 路由器。有三种方式:
1,将一台路由器配置为 IPv6 路由器
2,将一台 Linux 机器配置为 IPv6 路由器
3,将一台 Windows 机器配置为 IPv6 路由器

  第一种方式需要路由器支持 IPv6,或者自己给路由器刷入自定义固件令其支持 IPv6。这个方式动作比较大,需要折腾的地方比较多,可以参考该文:

Tomato Toastman完美支持he.net的IPV6

  这是一个独立博客作者写的。据我观察,一般独立域名的博客寿命都比较短。还好我们有许多垃圾站。如果原始链接失效了,通过标题还可以搜到一批垃圾站的转载。

  第二种方式和第一种类似,毕竟路由器上跑的大都是 Linux 内核。这一类的文章相对较多,我也贴一个链接:

he.net的TunnelBroker

  我只介绍第三种方式的操作步骤。对于大部分人来说,这种方式是最容易实现的。先说明一下我的网络结构。一个普通的 ADSL 拨号上网的路由器后面带几台电脑。有 Linux 也有 Windows。我自己用的是一台 Windows 7。以下就把这台 Windows 7 配置成 IPv6 路由器,且不影响原来的正常使用。当然,要让整个网络的 IPv6 连接一直有效的话,需要让这台电脑一直开着。

  以下以这三个参数值为例,你需要修改为自己的参数,注意粗体部分:

Server IPv6 Address: 2001:470:a:76f::1
Client IPv6 Address: 2001:470:a:76f::2
Routed /64: 2001:470:b:76f::/64

  所有操作均在心法第二层操作成功后的基础之上。首先运行 cmd 进入命令行。然后,只需三条命令,即可将该 Windows 7 配置成一台 IPv6 路由器:


将通道设置为允许转发:
netsh interface ipv6 set interface IP6Tunnel forwarding=enabled
将本地连接的网卡也设置为允许转发:
netsh interface ipv6 set interface "本地连接" forwarding=enabled
给网卡添加一个 IPv6 地址,这个地址就是 IPv6 网关了:
netsh interface ipv6 add address "本地连接" 2001:470:b:76f::1


  这就设置好了,这个是不用重启,立即生效的。其他局域网的电脑只需在"本地连接"中指定一个空闲的 2001:470:b:76f::/64 段的 IPv6 地址,设置好正确的网关即可,如下图。之后也可以设置让电脑自动获取 IPv6 地址,本文后面会有介绍。



  局域网中有 ubuntu 机器的话,也可以配置一个 IPv6 的地址:


  需要断开 ubuntu 的网络连接再重新连上,IPv6 地址就生效了。我们还是到 http://[2001:4810::110]/ 验证一下:



  为了让其他电脑可以自动配置 IPv6 地址,需要在 Windows 7 路由器上再运行几个命令:


开启本地连接的路由广播,向局域网内通知 IPv6 路由器的地址:
netsh interface ipv6 set interface "本地连接" advertise=enabled
下面这条路由是给网卡添加地址时自动加上的,现在需要广播该路由信息:
netsh interface ipv6 set route 2001:470:b:76f::/64 "本地连接" publish=yes
下面这条路由是早就有了的,现在也需要广播这条路由信息:
netsh interface ipv6 set route ::/0 IP6Tunnel 2001:470:a:76f::1 publish=yes


  设置完成之后,可能需要稍等片刻,待路由广播了一段时间,其他电脑设置为“自动获取 IPv6 地址”,就能获得一个 IPv6 地址了。


  现在网络中就有四台电脑连入 IPv6 网络了。除了本机,另外三台如果访问了 IPv6 网络,本机(也是 IPv6 网关、路由器)上就可以通过命令 netsh interface ipv6 show neighbors 查询到一个地址列表:



  其中 2001:470:b:76f::3 是 ubuntu,另外两个 2001:470:b:76f::/64 的地址都是设置成自动获取 IPv6 地址的 Windows。


  我们从外面 ping 一下第二台电脑看能不能连通:



  完全正常。虽然延迟较高,也是受网络条件所限,但至少说明这台电脑已经是一台全球可路由的 IPv6 节点了。


参考:
1,http://www.tunnelbroker.net/forums/index.php?topic=918.0
2,http://www.dezzanet.co.uk/articles/26/2010/05/12/Sharing-an-IPv6-tunnel-from-a-Windows-machine/
3,http://www.tunnelbroker.net/forums/index.php?topic=1439.msg9375#msg9375 的第10楼的回复


使用Facebook社交插件参与评论: