2014年11月13日星期四

pcaptraceroute,一个用来检测GFW的工具

从目前的经验来看,GFW对于IP在黑名单中的网站也并不是全部数据包都拦截,似乎是为了隐藏自己的存在,GFW只选择性的拦截返回包,而不拦截第一次发送出来的包。

现象1:你在境内的一台电脑上发送一个TCP syn包给境外一个被GFW拦截的服务器,在境外的服务器上用tcpdump抓包,会发现这个境内的电脑发送的syn包可以成功到达,同时,tcpdump也会显示,境外的服务器按照网络协议的要求返回了一个ack包给境内的电脑,但境内的电脑无法接受到这个返回的ack包。

现象2:从境外被GFW屏蔽的服务器上发送一个TCP syn包给境内的电脑,境内的电脑可以接受到这个syn包,但境内的电脑返回的ack包无法达到境外的服务器。

GFW这种方式让人很难检测出它的存在,因为你主动发过去的包是可以通过的,它只把返回的包拦截下来,这样在你看来是畅通的,但对方没有返回。因此,我写了一个pcaptraceroute程序,它用和traceroute同样的原理来检测网络中间节点的可达性,只不过,它发送的是TCP的ack包。这样,如果在一台被GFW屏蔽的主机上运行这个程序,就可以检测出数据包是从哪一跳开始完全不可达了。

项目主页: