googledriver出来两天了.发现在国内下载了客户端无法安装,这是因为有墙的存在.经测试更改hosts文件能正常安装,hosts文件地址https://smarthosts.googlecode.com/svn/trunk/hosts 复制到C:\WINDOWS\system32\drivers\etc\hosts文件里再次运行gdriver程序即可.
另:提取了安装gdriver的程序.不知道没有安装的能不能用.点击下载,没有安装的朋友测试一下.
2012年4月26日星期四
2012年4月19日星期四
XP系统下,DotCloud部署wordpress最全的笔记教程
本人在08年时因为找ghs反向代理时找到一个论坛,发现这个论坛提供免费空间,每月在论坛发5帖就可以有一个免费空间.空间是日本的,速度还不错,在这里就不点名了.论坛很低调,正因为低调所以能存活至今,没有被国家防火墙给看上.2012年申请了一个域名,就托管在这个免费空间上.谁不想前几天版主发邮件说我放了破解的程序给你封掉了.google了好久,发现把空间托管在云上是最好的方法.亚马逊提供1年的免费,但是我没有信用卡, 无法申请.最后找到了Paas,支持PHP的PaaS有Orchestra, PHPFog,CloudControl, dotCloud, OpenShift.新浪SEA.googleGAE ,新浪SEA速度很快.但是要云豆,没有云豆就无法访问,GAE太出名.被挡在了门外.最后进入我眼中的是dotcloud.它可以免费绑定域名.有一个专门的上传程序.这样对于代码不懂的我很是方便.
下面开始部署wordpress吧,下面以windows xp为例.
1,申请帐号:http://www.dotcloud.com 输入你邮箱,点 Try it now ‣ 然后到你邮箱点击发送过来的链接激活.
2,安装Cygwin 选择默认的选择,直到您出现下面对话框。国内的都选163吧.
当出现下面选择对话框时选择,安装以下安装包
3,安装完毕后,你应该有一个在您的桌面上的Cygwin图标。启动它:你会得到一个命令行shell
4,运行 $ wget http://peak.telecommunity.com/dist/ez_setup.py $是命令提示符,
5,安装python $ python ez_setup.py
6,安装 easy_install $ easy_install pip
7,安装dotcloud $ pip install dotcloud 这时Cygwin已安装完成.测试一下dotcloud是否安装完成.输入 dotcloud -h 如果出现帮助说明已成功安装.
8,登录dotcloud网站在http://www.dotcloud.com/account/settings里找到 API Key ,复制.
9,输入dotcloud $ dotcloud 然后粘贴.
下面我们开始搭建wordpress
10,进入wordpress官网网站下载wordpress程序.解压到home/用户名下
11,创建应用"hdp521" $dotcloud create hdp521 hdp521换成你的网址名.
删除服务$dotcloud destroy quany.www 删除应用$dotcloud destroy quany
12,在wordpress里新建一个 dotcloud.yml ,文件内容如下
www:
type: php
db:
type: mysql
13,在终端输入上传命令 $dotcloud push hdp521 wordpress/ 等待一下.
14,这时我们验证一下是否上传完成 $dotcloud list 出现以下就说明上传完成了
$ dotcloud list
hdp521:
- db (type: mysql; instances: 1)
- www (type: php; instances: 1)
15, 输入 $dotcloud info quany.db 查看数据库用户名和密码
数据库名为mysql user:root password是后面的一段字符, 数据库地址为hdp521-hdp521.dotcloud.com:22433
16,输入 $ dotcloud url hdp521 出现博客地址.
17,绑定域名
18,使用Tunnelier这个SSH客户端
下载了TunnelierPortable便携版,解压即可使用。在 user keypair manager中导入私钥key文件,然后在登录认证选项中选择 publickey – slot1(这个具体按你的keypair manager中key位置决定)。运行dotcloud info hdp521.www,这时里面有url:的后面就是主机名,端口号和用户名.把上面三个写入tunnelier上host,port和username,就可登陆远程ssh.OK,后面就简单了,登录后和普通的FTP一样操作了,想方便的可以直接上传下载文件了。另外告诉你一个小密秘,在services里按照下面设置把socks打勾,把浏览器设置代理为8086,这时你的上网IP为亚马逊.哥,你懂的.
注:附上我在网络上找的一些命令
连接远程数据库
dotcloud run hdp521.db -- mysql -u root -pmo********qnuidvhrsJ (-p后面是密码)
创建数据库 create database tencent;
将数据库quany删除 drop database quany;
察看数据库列表 show databases;
创建user1用户密码为123 CREATE USER 'user1' IDENTIFIED BY '123';
删除用户user DROP USER user;
授权 user 访问dba grant create session, dba to user;
立即生效 FLUSH PRIVILEGES;
以下命令是在ssh里运行.
sudo /etc/init.d/nginx restart 启动nginx
supervisorctl restart php5-fpm 启动php5
下面开始部署wordpress吧,下面以windows xp为例.
1,申请帐号:http://www.dotcloud.com 输入你邮箱,点 Try it now ‣ 然后到你邮箱点击发送过来的链接激活.
2,安装Cygwin 选择默认的选择,直到您出现下面对话框。国内的都选163吧.
当出现下面选择对话框时选择,安装以下安装包
- net/openssh
- net/rsync
- devel/git
- devel/mercurial
- python/python (make sure it's at least 2.6!)
- web/wget
3,安装完毕后,你应该有一个在您的桌面上的Cygwin图标。启动它:你会得到一个命令行shell
4,运行 $ wget http://peak.telecommunity.com/dist/ez_setup.py $是命令提示符,
5,安装python $ python ez_setup.py
6,安装 easy_install $ easy_install pip
7,安装dotcloud $ pip install dotcloud 这时Cygwin已安装完成.测试一下dotcloud是否安装完成.输入 dotcloud -h 如果出现帮助说明已成功安装.
8,登录dotcloud网站在http://www.dotcloud.com/account/settings里找到 API Key ,复制.
9,输入dotcloud $ dotcloud 然后粘贴.
下面我们开始搭建wordpress
10,进入wordpress官网网站下载wordpress程序.解压到home/用户名下
11,创建应用"hdp521" $dotcloud create hdp521 hdp521换成你的网址名.
删除服务$dotcloud destroy quany.www 删除应用$dotcloud destroy quany
12,在wordpress里新建一个 dotcloud.yml ,文件内容如下
www:
type: php
db:
type: mysql
13,在终端输入上传命令 $dotcloud push hdp521 wordpress/ 等待一下.
14,这时我们验证一下是否上传完成 $dotcloud list 出现以下就说明上传完成了
$ dotcloud list
hdp521:
- db (type: mysql; instances: 1)
- www (type: php; instances: 1)
15, 输入 $dotcloud info quany.db 查看数据库用户名和密码
数据库名为mysql user:root password是后面的一段字符, 数据库地址为hdp521-hdp521.dotcloud.com:22433
16,输入 $ dotcloud url hdp521 出现博客地址.
17,绑定域名
$ dotcloud alias add quany.www www.quany.info 创建一条域名的CNAME记录到gateway.dotcloud.com就可以访问了。
18,使用Tunnelier这个SSH客户端
下载了TunnelierPortable便携版,解压即可使用。在 user keypair manager中导入私钥key文件,然后在登录认证选项中选择 publickey – slot1(这个具体按你的keypair manager中key位置决定)。运行dotcloud info hdp521.www,这时里面有url:的后面就是主机名,端口号和用户名.把上面三个写入tunnelier上host,port和username,就可登陆远程ssh.OK,后面就简单了,登录后和普通的FTP一样操作了,想方便的可以直接上传下载文件了。另外告诉你一个小密秘,在services里按照下面设置把socks打勾,把浏览器设置代理为8086,这时你的上网IP为亚马逊.哥,你懂的.
注:附上我在网络上找的一些命令
连接远程数据库
dotcloud run hdp521.db -- mysql -u root -pmo********qnuidvhrsJ (-p后面是密码)
创建数据库 create database tencent;
将数据库quany删除 drop database quany;
察看数据库列表 show databases;
创建user1用户密码为123 CREATE USER 'user1' IDENTIFIED BY '123';
删除用户user DROP USER user;
授权 user 访问dba grant create session, dba to user;
立即生效 FLUSH PRIVILEGES;
以下命令是在ssh里运行.
sudo /etc/init.d/nginx restart 启动nginx
supervisorctl restart php5-fpm 启动php5
2012年4月17日星期二
2012年4月12日星期四
最好用的开源磁盘加密软件FreeOTFE
FreeOTFE是开放源代码的磁盘加密软件(OTFE的意思是"实时加密")。官方网站有安装版和绿色版.
FreeOTFE特别注重移植性。该程序的用户设置可以保存到用户自己的配置文件,也可以用全局方式来保存(即保存到该程序目录)。另外与 TrueCrypt一样,FreeOTFE也有"移植模式"——因而可以把FreeOTFE可执行文件和加密卷放到可移动磁盘上,那样可以在另一台电脑上 使用,即使这台电脑上面没有安装FreeOTFE。最后,FreeOTFE可供基于Windows Mobile 6的个人数字助理(PDA)使用;台式电脑上创建或者使用的卷可以在PDA上使用,反之亦然。
支持的操作系统:MS Windows 2000/XP/Vista,Windows Mobile 2003/2005/Windows Mobile 6 PDA
文件下载地址点击这里
FreeOTFE特别注重移植性。该程序的用户设置可以保存到用户自己的配置文件,也可以用全局方式来保存(即保存到该程序目录)。另外与 TrueCrypt一样,FreeOTFE也有"移植模式"——因而可以把FreeOTFE可执行文件和加密卷放到可移动磁盘上,那样可以在另一台电脑上 使用,即使这台电脑上面没有安装FreeOTFE。最后,FreeOTFE可供基于Windows Mobile 6的个人数字助理(PDA)使用;台式电脑上创建或者使用的卷可以在PDA上使用,反之亦然。
支持的操作系统:MS Windows 2000/XP/Vista,Windows Mobile 2003/2005/Windows Mobile 6 PDA
文件下载地址点击这里
2012年4月5日星期四
电脑无法启动,诊断卡显示20 17 21 d4
电脑无法启动,诊断卡显示20 17 21 d4
搞了好久都有问题
到最后问题解决了.一个内存故障,然后两个内存槽有问题.有问题的你是不是也是
同样的问题呢?
搞了好久都有问题
到最后问题解决了.一个内存故障,然后两个内存槽有问题.有问题的你是不是也是
同样的问题呢?
停用连接出错
今天朋友的笔记本无线无法停用,导致有线网卡不可用.在网上找了一些方法
有说CAtDB文件损坏,有说运行netsh winsock reset catalog的,还有说 运行net
stop cryptsvc 然后 ren %systemroot%\System32\Catroot2 oldcatroot2 的
但是都不管用
到最后我更新了无线网卡驱动问题解决,之前的无线网卡驱动是驱动精灵下载的.在
这里做个记号,希望能帮助到你.
有说CAtDB文件损坏,有说运行netsh winsock reset catalog的,还有说 运行net
stop cryptsvc 然后 ren %systemroot%\System32\Catroot2 oldcatroot2 的
但是都不管用
到最后我更新了无线网卡驱动问题解决,之前的无线网卡驱动是驱动精灵下载的.在
这里做个记号,希望能帮助到你.
2012年4月4日星期三
PHP在线远程下载
这段代码虽然很简短,但对使用虚拟主机的童鞋来说,绝对是福利!它可以让虚拟主机像VPS那样直接远程wget文件到你的空间,而不用经过你的本地电脑,速度绝对是杠杠的。
立刻放出完整代码(已经我的测试,可用):
________________________________________________________
<form method="post">
<input name="url" size="50" />
<input name="submit" type="submit" />
</form>
<?php
$pwd='123';//这里为你的密码
if ($_REQUEST['pwd']!=$pwd)
exit('Sorry ,you are not validate user!');
// maximum execution time in seconds
set_time_limit (24 * 60 * 60);
if (!isset($_POST['submit'])) die();
// folder to save downloaded files to. must end with slash
$destination_folder = './';
$url = $_POST['url'];
$newfname = $destination_folder . basename($url);
$file = fopen ($url, "rb");
if ($file) {
$newf = fopen ($newfname, "wb");
if ($newf)
while(!feof($file))
{
fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
}
}
if ($file)
{
fclose($file);
}
if ($newf) {
fclose($newf);
echo 'OK,File has been downloaded!';
}
?>
___________________________________________________________
使用方法:
1、将这个代码保存为down.php 上传到你的服务器,然后访问这个地址down.php?pwd=你的密码 。
2、然后在输入框输入你要下载的文件的地址就OK了。
3、输入你的网址/文件名下载.
立刻放出完整代码(已经我的测试,可用):
________________________________________________________
<form method="post">
<input name="url" size="50" />
<input name="submit" type="submit" />
</form>
<?php
$pwd='123';//这里为你的密码
if ($_REQUEST['pwd']!=$pwd)
exit('Sorry ,you are not validate user!');
// maximum execution time in seconds
set_time_limit (24 * 60 * 60);
if (!isset($_POST['submit'])) die();
// folder to save downloaded files to. must end with slash
$destination_folder = './';
$url = $_POST['url'];
$newfname = $destination_folder . basename($url);
$file = fopen ($url, "rb");
if ($file) {
$newf = fopen ($newfname, "wb");
if ($newf)
while(!feof($file))
{
fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
}
}
if ($file)
{
fclose($file);
}
if ($newf) {
fclose($newf);
echo 'OK,File has been downloaded!';
}
?>
___________________________________________________________
使用方法:
1、将这个代码保存为down.php 上传到你的服务器,然后访问这个地址down.php?pwd=你的密码 。
2、然后在输入框输入你要下载的文件的地址就OK了。
3、输入你的网址/文件名下载.
2012年4月1日星期日
如何区分国内上网环境中不同的人为网络故障
众所周知,在国内上网会遇到各种各样不同的人为网络故障,使得我们无法正常访问很多网站。但由于很多人并不熟悉网络,很多时候会无法区分不同的网络故障,导致明明是网络故障,却认为是服务器故障;或明明是服务器故障,却认为是网络故障的情况。我觉得有必要说明一下不同网络故障的特征,以及区分它们并解决它们的方法。
在国内上网环境中,我们经常遇到的网络故障有:DNS劫持、DNS污染、IP封锁、服务器防火墙IP过滤、服务器宕机、基于关键词的TCP连接重置、无状态的TCP连接重置、SSL证书过滤、SSL劫持、HTTP会话劫持等网络故障。下面我就依次进行说明:
1、DNS劫持
DNS劫持会导致我们访问了一些不存在的或不稳定的网站的时候,访问到的却是电信114搜索(详见月光博客《断网后互联星空的浏览器劫持》)或访问Google却显示了Baidu的主页(详见月光博客《Google博客搜索摇身一变成百度》)。
如果需要确认自己是否处在DNS劫持的环境中,我们可以在Windows命令行cmd中使用Windows自带的网络诊断工具nslookup查找一个不存在或不稳定的域名进行一下网络诊断:
C:\>nslookup www.SomeRandomDomainName.com
Server: ns-pd.online.sh.cn
Address: 202.96.209.133
Non-authoritative answer:
Name: www.SomeRandomDomainName.com
Address: 218.83.175.155
我们看到,www.SomeRandomDomainName.com本应该是一个不存在的域名,DNS服务器应该告诉我们这个域名不存在,但我们却看到DNS服务器告诉我们这个域名的IP为218.83.175.155(不同地区的114搜索的IP都不同,可能得到的IP并不是218.83.175.155,而是自己所在地区的114搜索的服务器IP地址),而这个IP却是114搜索的IP,导致我们在浏览器中访问这个网站时看到的是114搜索的网页。
如果需要解决DNS劫持的问题,可以把自己的域名解析服务器换乘国外的,比如OpenDNS(详见月光博客《使用OpenDNS解决DNS域名劫持》)或Google DNS(详见月光博客《Google推出免费DNS服务》)。
解决之后我们再次使用nslookup查找一下这个网站:
C:\>nslookup www.SomeRandomDomainName.com
Server: google-public-dns-a.google.com
Address: 8.8.8.8
*** google-public-dns-a.google.com can't find www.SomeRandomDomainName.com: Non-existent domain
我们看到DNS服务器正确的告诉了我们这个域名不存在,我们不会被劫持到114搜索了。
不过,正如《使用OpenDNS解决DNS域名劫持》中最后一段所说的那样,"但是对于DNS污染的劫持,使用OpenDNS也无法解决问题"。那么接下来,我就介绍一下DNS污染。
2、DNS污染
由于DNS劫持可以通过把域名解析服务器更换为国外的来解决问题,所以系统需要使用DNS污染来封锁一些域名。这样,即使使用国外的域名服务器也得不到服务器的正确IP,所以也就无法访问这些服务器了。比如现在著名的微博客始祖twitter主页就遭到了DNS污染。
如果需要确认域名遭到了DNS污染而不是其他的故障,首先要了解,DNS劫持是由国内的域名服务器完成的,所以我们把域名服务器换成国外的就可以解决问题;而DNS污染是由系统完成的,所以即使更换了域名服务器,系统仍旧可以发送伪造的域名解析结果替换正确的解析结果。所以我们可以通过使用一个不存在的国外IP作为我们的域名服务器进行诊断究竟是DNS劫持还是DNS污染。我们仍旧通过使用nslookup进行网络诊断,选一个不存在的国外IP为144.223.234.234:
C:\>nslookup twitter.com 144.223.234.234
DNS request timed out.
timeout was 2 seconds.
*** Can't find server name for address 144.223.234.234: Timed out
Server: UnKnown
Address: 144.223.234.234
Name: twitter.com
Address: 93.46.8.89
我们看到,由于144.223.234.234不存在,理应没有任何返回。但我们却得到了一个错误的IP:93.46.8.89。我们再测试一下刚才被DNS劫持的IP的情况:
C:\>nslookup www.SomeRandomDomainName.com 144.223.234.234
DNS request timed out.
timeout was 2 seconds.
*** Can't find server name for address 144.223.234.234: Timed out
Server: UnKnown
Address: 144.223.234.234
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
*** Request to UnKnown timed-out
我们看到,www.SomeRandomDomainName.com 没有返回结果,那么它没有被DNS污染。
如果要解决DNS污染,我们只能使用各种加密代理进行远程DNS解析、VPN或利用系统的漏洞了。
3、IP封锁
这里IP封锁指的是国内把国外服务器的IP加入了系统的黑名单,导致大部分地区甚至全国无法直接访问服务器。由于系统是分布式的,所以有可能出现部分地区可以访问,部分地区不能访问的情况。比如现在知名的云存储服务Dropbox的主页,就是遭到了IP封锁。
首先我们把域名服务器设置为国外的,排除了DNS劫持的问题。之后我们诊断一下dropbox的域名是否遭到了DNS污染:
C:\>nslookup www.dropbox.com 144.223.234.234
DNS request timed out.
timeout was 2 seconds.
*** Can't find server name for address 144.223.234.234: Timed out
Server: UnKnown
Address: 144.223.234.234
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
*** Request to UnKnown timed-out
显然也没有遭到DNS污染。那么接下去我们可以在没有过滤ICMP协议的网络环境中(有些小区宽带和有些公司的内部网络过滤了ICMP协议,无法使用tracert),我们可以在Windows命令行cmd中使用Windows自带的网络诊断工具tracert进行一下网络诊断是网站遭到了IP封锁还是其他的故障:
C:\>tracert -d www.dropbox.com
Tracing route to www.dropbox.com [174.36.30.70]
over a maximum of 30 hops:
1 18 ms 19 ms 26 ms 58.35.240.1
2 15 ms 20 ms 29 ms 58.35.240.1
3 13 ms 10 ms 14 ms 124.74.20.45
4 14 ms 14 ms 15 ms 124.74.209.137
5 10 ms 15 ms 14 ms 61.152.86.58
6 * * * Request timed out.
7 * * * Request timed out.
8 * * * Request timed out.
……
我们看到,最后一个IP为61.152.86.58(不同地区的IP不一样),之后就不通了,显然在61.152.86.58附近遭到了IP封锁。那么我们打开ip138查一下61.152.86.58是谁在掌控:
您查询的IP:61.152.86.58
* 本站主数据:上海市 电信
* 参考数据一:上海市 电信
* 参考数据二:上海市 电信
显然,问题在上海电信这里(其他地区可能是地区的本地电信),而不是dropbox服务器的问题。
4、服务器防火墙IP过滤和服务器宕机
把这两点放在一起写是因为这两种情况的对外表现是一样的。但和IP封锁却有很大区别。IP封锁的最后一个可达IP是中国的,而服务器防火墙IP过滤和服务器当机时的最后一个可达IP却是国外的。比如我们拿75.101.142.137做试验,之前在上面部署过alexa的网站,现在这个IP上暂时没有服务器(可以看成服务器宕机):
C:\>tracert -d 75.101.142.237
Tracing route to 75.101.142.237 over a maximum of 30 hops
1 25 ms 18 ms 18 ms 58.35.240.1
2 25 ms 42 ms 27 ms 58.35.240.1
3 10 ms 15 ms 14 ms 124.74.37.9
4 49 ms 59 ms 12 ms 124.74.209.129
5 14 ms 14 ms 14 ms 61.152.86.142
6 10 ms 14 ms 15 ms 202.97.35.154
7 14 ms 15 ms 14 ms 202.97.34.126
8 194 ms 195 ms 194 ms 202.97.51.138
9 171 ms 170 ms 173 ms 202.97.50.54
10 215 ms 179 ms 175 ms 63.146.27.133
11 279 ms 280 ms 278 ms 67.14.36.6
12 * * * Request timed out.
13 249 ms 249 ms 244 ms 72.21.199.40
14 254 ms 254 ms 254 ms 72.21.222.157
15 250 ms 250 ms 249 ms 216.182.232.53
16 270 ms 270 ms 273 ms 216.182.224.22
17 272 ms 269 ms 289 ms 75.101.160.35
18 * * * Request timed out.
19 * * * Request timed out.
20 * * * Request timed out.
我们看到最后一个可达IP为75.101.160.35,然后我们查一下这个IP是谁的呢:
您查询的IP:75.101.160.35
* 本站主数据:美国
* 参考数据一:美国
* 参考数据二:美国 华盛顿州金县西雅图市亚马逊公司
显然,这个是服务器故障。
如果要解决IP封锁,我们只能通过加密代理、VPN或利用系统的漏洞进行访问这些网站了。
5、基于关键词的TCP连接重置
国内的系统在人们通过http协议访问国外网站时会记录所有的内容,一旦出现某些比较"敏感"的关键词时,就会强制断开TCP连接,记录双方IP并保留一段时间 (1分钟左右),我们的浏览器也就会显示"连接被重置"。之后在这一段时间内(1分钟左右),由于我们和服务器的IP被摄查系统记录,我们就无法再次访问这个网站了。我们必须停止访问这个网站,过了这段时间再次访问没有这些关键词的网页,就又能访问这个网站了。
由于这些特征,我们判断是否遭到了基于关键词的TCP连接重置的情况也比较容易。如果浏览器显示"连接被重置",并且在一段时间内无法再次访问这个网站,之后过了这段时间访问这个网站上没有这些关键词的网页又能访问的时候,我们就是遭到了基于关键词的TCP连接重置的故障。
正是因为http协议是明文传输的,所以才能基于关键词进行TCP连接重置。所以如果网站支持https加密访问,我们可以通过https方式访问网站,从而解决这个问题。但如果网站不支持https方式访问,我们只能通过加密代理、VPN或利用系统的漏洞进行访问了。而且国内的系统对付https也不是没有其他手段了。除了IP封锁外,还有无状态的TCP连接重置、SSL证书过滤、SSL劫持等手段,下面进行依次介绍。
6、无状态的TCP连接重置
由于https是加密传输数据的协议,系统无法知道通过https协议传输了什么内容,但又不允许民众使用https访问"有害信息",所以系统只要监测到(系统只是知道访问了这个网站的https协议,并不知道其中传输的内容)访问了指定网站的https协议(比如Google Docs的https访问方式),就会强制断开TCP连接。这样,这些网站的https协议在国内就无法直接使用了,很多人被迫使用http协议,从而传输的所有内容被系统所记录。
无状态的TCP连接重置的结果也是浏览器显示"连接被重置",只不过无论访问这个服务器上的任何网页都会被重置。如果要解决这个问题,也只能依靠加密代理、VPN或利用系统的漏洞了。
7、SSL证书过滤
和无状态的TCP连接重置一样,由于https是加密传输数据的协议,系统无法知道通过https协议传输了什么内容,但又不允许民众使用https访问"有害信息",除了域名污染和无状态的TCP连接重置防止无法审查内容外,还有SSL证书过滤的审查手段。由于https传输过程中,SSL证书却是明文传输的,所以可以监测SSL证书是否掰发给指定域名的。如果确实如此,那么就强制断开TCP连接,浏览器也会显示"连接被重置"。SSL证书过滤只发生在使用https访问网站的时候。
SSL证书过滤的情况比较少。如果需要解决这个问题,也只能依靠加密代理、VPN或利用系统的漏洞了。
8、SSL劫持
断开https连接虽然能阻止民众访问"有害信息",但并不知道访问了什么有害信息。基于这一点,针对https的弱点(信任所有证书颁发机构CA),CNNIC申请成为了顶级证书颁发机构(Root CA),从而可以发假证书进行中间人攻击,从而破解https传输的内容。详见月光博客《破解Google Gmail的https新思路》。
如果遭到了SSL劫持,很难发现。我们通过https访问国外网站的时候必须每次检查一下证书是否为国内的证书颁发机构颁发。如果为国内的证书颁发机构颁发,那么很可能遭到了SSL劫持,必须马上停止继续访问。
如果要解决SSL劫持,我们可以去浏览器中禁止比如CNNIC那样的国内证书颁发机构的证书(比如《CNNIC,我不信任你》)。但这并不能完全解决问题,如果某一天一个不知名的国内证书颁发机构参与了SSL劫持就很难发现。最终我们还需要依赖加密代理或VPN。
9、HTTP会话劫持
HTTP会话劫持是修改正常的http返回结果,可以在其中加入广告,甚至是病毒木马。而一般上网被http会话劫持加入广告,很有可能认为是网站自己的广告。由于http协议是明文传输的,http会话劫持也就可以做到。月光博客中《电信级的网络弹出广告》、《获取了电信恶意弹出广告的罪证》和《谁控制了我们的浏览器?》也有详细介绍http会话劫持。HTTP会话劫持通常是ISP为了推送广告而实施的,但并不排除这一手段今后会被系统所利用。
要解决HTTP会话劫持,月光博客中也提供了一种解决思路——《解除ADSL弹出广告的方法》。使用浏览器插件屏蔽广告能解决部分问题,也不能完全解决问题。如果要从技术手段解决HTTP会话劫持,一种办法是使用加密代理和VPN访问所有的网站,包括国内的,但也不能完全解决问题,如果HTTP会话劫持是在服务器附近的路由器上设置的,这种方法也无法解决;另一种办法是针对不同的HTTP会话劫持,我们通过刷路由器固件的方式再劫持回来(dd-wrt和tomato路由器固件支持自定义,可能可以把HTTP会话再劫持回原来的数据),或者针对不同的HTTP会话劫持,使用不同的本地应用层代理服务器进行广告过滤。
在国内常见的人为网络故障都介绍完了,同学们都可以区分不同的故障了并加以解决吗?
在国内上网环境中,我们经常遇到的网络故障有:DNS劫持、DNS污染、IP封锁、服务器防火墙IP过滤、服务器宕机、基于关键词的TCP连接重置、无状态的TCP连接重置、SSL证书过滤、SSL劫持、HTTP会话劫持等网络故障。下面我就依次进行说明:
1、DNS劫持
DNS劫持会导致我们访问了一些不存在的或不稳定的网站的时候,访问到的却是电信114搜索(详见月光博客《断网后互联星空的浏览器劫持》)或访问Google却显示了Baidu的主页(详见月光博客《Google博客搜索摇身一变成百度》)。
如果需要确认自己是否处在DNS劫持的环境中,我们可以在Windows命令行cmd中使用Windows自带的网络诊断工具nslookup查找一个不存在或不稳定的域名进行一下网络诊断:
C:\>nslookup www.SomeRandomDomainName.com
Server: ns-pd.online.sh.cn
Address: 202.96.209.133
Non-authoritative answer:
Name: www.SomeRandomDomainName.com
Address: 218.83.175.155
我们看到,www.SomeRandomDomainName.com本应该是一个不存在的域名,DNS服务器应该告诉我们这个域名不存在,但我们却看到DNS服务器告诉我们这个域名的IP为218.83.175.155(不同地区的114搜索的IP都不同,可能得到的IP并不是218.83.175.155,而是自己所在地区的114搜索的服务器IP地址),而这个IP却是114搜索的IP,导致我们在浏览器中访问这个网站时看到的是114搜索的网页。
如果需要解决DNS劫持的问题,可以把自己的域名解析服务器换乘国外的,比如OpenDNS(详见月光博客《使用OpenDNS解决DNS域名劫持》)或Google DNS(详见月光博客《Google推出免费DNS服务》)。
解决之后我们再次使用nslookup查找一下这个网站:
C:\>nslookup www.SomeRandomDomainName.com
Server: google-public-dns-a.google.com
Address: 8.8.8.8
*** google-public-dns-a.google.com can't find www.SomeRandomDomainName.com: Non-existent domain
我们看到DNS服务器正确的告诉了我们这个域名不存在,我们不会被劫持到114搜索了。
不过,正如《使用OpenDNS解决DNS域名劫持》中最后一段所说的那样,"但是对于DNS污染的劫持,使用OpenDNS也无法解决问题"。那么接下来,我就介绍一下DNS污染。
2、DNS污染
由于DNS劫持可以通过把域名解析服务器更换为国外的来解决问题,所以系统需要使用DNS污染来封锁一些域名。这样,即使使用国外的域名服务器也得不到服务器的正确IP,所以也就无法访问这些服务器了。比如现在著名的微博客始祖twitter主页就遭到了DNS污染。
如果需要确认域名遭到了DNS污染而不是其他的故障,首先要了解,DNS劫持是由国内的域名服务器完成的,所以我们把域名服务器换成国外的就可以解决问题;而DNS污染是由系统完成的,所以即使更换了域名服务器,系统仍旧可以发送伪造的域名解析结果替换正确的解析结果。所以我们可以通过使用一个不存在的国外IP作为我们的域名服务器进行诊断究竟是DNS劫持还是DNS污染。我们仍旧通过使用nslookup进行网络诊断,选一个不存在的国外IP为144.223.234.234:
C:\>nslookup twitter.com 144.223.234.234
DNS request timed out.
timeout was 2 seconds.
*** Can't find server name for address 144.223.234.234: Timed out
Server: UnKnown
Address: 144.223.234.234
Name: twitter.com
Address: 93.46.8.89
我们看到,由于144.223.234.234不存在,理应没有任何返回。但我们却得到了一个错误的IP:93.46.8.89。我们再测试一下刚才被DNS劫持的IP的情况:
C:\>nslookup www.SomeRandomDomainName.com 144.223.234.234
DNS request timed out.
timeout was 2 seconds.
*** Can't find server name for address 144.223.234.234: Timed out
Server: UnKnown
Address: 144.223.234.234
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
*** Request to UnKnown timed-out
我们看到,www.SomeRandomDomainName.com 没有返回结果,那么它没有被DNS污染。
如果要解决DNS污染,我们只能使用各种加密代理进行远程DNS解析、VPN或利用系统的漏洞了。
3、IP封锁
这里IP封锁指的是国内把国外服务器的IP加入了系统的黑名单,导致大部分地区甚至全国无法直接访问服务器。由于系统是分布式的,所以有可能出现部分地区可以访问,部分地区不能访问的情况。比如现在知名的云存储服务Dropbox的主页,就是遭到了IP封锁。
首先我们把域名服务器设置为国外的,排除了DNS劫持的问题。之后我们诊断一下dropbox的域名是否遭到了DNS污染:
C:\>nslookup www.dropbox.com 144.223.234.234
DNS request timed out.
timeout was 2 seconds.
*** Can't find server name for address 144.223.234.234: Timed out
Server: UnKnown
Address: 144.223.234.234
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
*** Request to UnKnown timed-out
显然也没有遭到DNS污染。那么接下去我们可以在没有过滤ICMP协议的网络环境中(有些小区宽带和有些公司的内部网络过滤了ICMP协议,无法使用tracert),我们可以在Windows命令行cmd中使用Windows自带的网络诊断工具tracert进行一下网络诊断是网站遭到了IP封锁还是其他的故障:
C:\>tracert -d www.dropbox.com
Tracing route to www.dropbox.com [174.36.30.70]
over a maximum of 30 hops:
1 18 ms 19 ms 26 ms 58.35.240.1
2 15 ms 20 ms 29 ms 58.35.240.1
3 13 ms 10 ms 14 ms 124.74.20.45
4 14 ms 14 ms 15 ms 124.74.209.137
5 10 ms 15 ms 14 ms 61.152.86.58
6 * * * Request timed out.
7 * * * Request timed out.
8 * * * Request timed out.
……
我们看到,最后一个IP为61.152.86.58(不同地区的IP不一样),之后就不通了,显然在61.152.86.58附近遭到了IP封锁。那么我们打开ip138查一下61.152.86.58是谁在掌控:
您查询的IP:61.152.86.58
* 本站主数据:上海市 电信
* 参考数据一:上海市 电信
* 参考数据二:上海市 电信
显然,问题在上海电信这里(其他地区可能是地区的本地电信),而不是dropbox服务器的问题。
4、服务器防火墙IP过滤和服务器宕机
把这两点放在一起写是因为这两种情况的对外表现是一样的。但和IP封锁却有很大区别。IP封锁的最后一个可达IP是中国的,而服务器防火墙IP过滤和服务器当机时的最后一个可达IP却是国外的。比如我们拿75.101.142.137做试验,之前在上面部署过alexa的网站,现在这个IP上暂时没有服务器(可以看成服务器宕机):
C:\>tracert -d 75.101.142.237
Tracing route to 75.101.142.237 over a maximum of 30 hops
1 25 ms 18 ms 18 ms 58.35.240.1
2 25 ms 42 ms 27 ms 58.35.240.1
3 10 ms 15 ms 14 ms 124.74.37.9
4 49 ms 59 ms 12 ms 124.74.209.129
5 14 ms 14 ms 14 ms 61.152.86.142
6 10 ms 14 ms 15 ms 202.97.35.154
7 14 ms 15 ms 14 ms 202.97.34.126
8 194 ms 195 ms 194 ms 202.97.51.138
9 171 ms 170 ms 173 ms 202.97.50.54
10 215 ms 179 ms 175 ms 63.146.27.133
11 279 ms 280 ms 278 ms 67.14.36.6
12 * * * Request timed out.
13 249 ms 249 ms 244 ms 72.21.199.40
14 254 ms 254 ms 254 ms 72.21.222.157
15 250 ms 250 ms 249 ms 216.182.232.53
16 270 ms 270 ms 273 ms 216.182.224.22
17 272 ms 269 ms 289 ms 75.101.160.35
18 * * * Request timed out.
19 * * * Request timed out.
20 * * * Request timed out.
我们看到最后一个可达IP为75.101.160.35,然后我们查一下这个IP是谁的呢:
您查询的IP:75.101.160.35
* 本站主数据:美国
* 参考数据一:美国
* 参考数据二:美国 华盛顿州金县西雅图市亚马逊公司
显然,这个是服务器故障。
如果要解决IP封锁,我们只能通过加密代理、VPN或利用系统的漏洞进行访问这些网站了。
5、基于关键词的TCP连接重置
国内的系统在人们通过http协议访问国外网站时会记录所有的内容,一旦出现某些比较"敏感"的关键词时,就会强制断开TCP连接,记录双方IP并保留一段时间 (1分钟左右),我们的浏览器也就会显示"连接被重置"。之后在这一段时间内(1分钟左右),由于我们和服务器的IP被摄查系统记录,我们就无法再次访问这个网站了。我们必须停止访问这个网站,过了这段时间再次访问没有这些关键词的网页,就又能访问这个网站了。
由于这些特征,我们判断是否遭到了基于关键词的TCP连接重置的情况也比较容易。如果浏览器显示"连接被重置",并且在一段时间内无法再次访问这个网站,之后过了这段时间访问这个网站上没有这些关键词的网页又能访问的时候,我们就是遭到了基于关键词的TCP连接重置的故障。
正是因为http协议是明文传输的,所以才能基于关键词进行TCP连接重置。所以如果网站支持https加密访问,我们可以通过https方式访问网站,从而解决这个问题。但如果网站不支持https方式访问,我们只能通过加密代理、VPN或利用系统的漏洞进行访问了。而且国内的系统对付https也不是没有其他手段了。除了IP封锁外,还有无状态的TCP连接重置、SSL证书过滤、SSL劫持等手段,下面进行依次介绍。
6、无状态的TCP连接重置
由于https是加密传输数据的协议,系统无法知道通过https协议传输了什么内容,但又不允许民众使用https访问"有害信息",所以系统只要监测到(系统只是知道访问了这个网站的https协议,并不知道其中传输的内容)访问了指定网站的https协议(比如Google Docs的https访问方式),就会强制断开TCP连接。这样,这些网站的https协议在国内就无法直接使用了,很多人被迫使用http协议,从而传输的所有内容被系统所记录。
无状态的TCP连接重置的结果也是浏览器显示"连接被重置",只不过无论访问这个服务器上的任何网页都会被重置。如果要解决这个问题,也只能依靠加密代理、VPN或利用系统的漏洞了。
7、SSL证书过滤
和无状态的TCP连接重置一样,由于https是加密传输数据的协议,系统无法知道通过https协议传输了什么内容,但又不允许民众使用https访问"有害信息",除了域名污染和无状态的TCP连接重置防止无法审查内容外,还有SSL证书过滤的审查手段。由于https传输过程中,SSL证书却是明文传输的,所以可以监测SSL证书是否掰发给指定域名的。如果确实如此,那么就强制断开TCP连接,浏览器也会显示"连接被重置"。SSL证书过滤只发生在使用https访问网站的时候。
SSL证书过滤的情况比较少。如果需要解决这个问题,也只能依靠加密代理、VPN或利用系统的漏洞了。
8、SSL劫持
断开https连接虽然能阻止民众访问"有害信息",但并不知道访问了什么有害信息。基于这一点,针对https的弱点(信任所有证书颁发机构CA),CNNIC申请成为了顶级证书颁发机构(Root CA),从而可以发假证书进行中间人攻击,从而破解https传输的内容。详见月光博客《破解Google Gmail的https新思路》。
如果遭到了SSL劫持,很难发现。我们通过https访问国外网站的时候必须每次检查一下证书是否为国内的证书颁发机构颁发。如果为国内的证书颁发机构颁发,那么很可能遭到了SSL劫持,必须马上停止继续访问。
如果要解决SSL劫持,我们可以去浏览器中禁止比如CNNIC那样的国内证书颁发机构的证书(比如《CNNIC,我不信任你》)。但这并不能完全解决问题,如果某一天一个不知名的国内证书颁发机构参与了SSL劫持就很难发现。最终我们还需要依赖加密代理或VPN。
9、HTTP会话劫持
HTTP会话劫持是修改正常的http返回结果,可以在其中加入广告,甚至是病毒木马。而一般上网被http会话劫持加入广告,很有可能认为是网站自己的广告。由于http协议是明文传输的,http会话劫持也就可以做到。月光博客中《电信级的网络弹出广告》、《获取了电信恶意弹出广告的罪证》和《谁控制了我们的浏览器?》也有详细介绍http会话劫持。HTTP会话劫持通常是ISP为了推送广告而实施的,但并不排除这一手段今后会被系统所利用。
要解决HTTP会话劫持,月光博客中也提供了一种解决思路——《解除ADSL弹出广告的方法》。使用浏览器插件屏蔽广告能解决部分问题,也不能完全解决问题。如果要从技术手段解决HTTP会话劫持,一种办法是使用加密代理和VPN访问所有的网站,包括国内的,但也不能完全解决问题,如果HTTP会话劫持是在服务器附近的路由器上设置的,这种方法也无法解决;另一种办法是针对不同的HTTP会话劫持,我们通过刷路由器固件的方式再劫持回来(dd-wrt和tomato路由器固件支持自定义,可能可以把HTTP会话再劫持回原来的数据),或者针对不同的HTTP会话劫持,使用不同的本地应用层代理服务器进行广告过滤。
在国内常见的人为网络故障都介绍完了,同学们都可以区分不同的故障了并加以解决吗?
订阅:
博文 (Atom)