早起…
小雨…还没伞
昨天一晚没睡好。今天早上6点半就出门了。经过一家网吧门口,看到七八个人还在那上网,感觉更困了…
等公交,站牌旁停了一队接新娘子的车,旁边一小伙子精神不错,蹬三轮的也已经开工了。
美好的早晨,只是我的公交怎么还不来…
…
要不是下雨,我不会坐一站公交。
长途车站里安检的机器都还没开,难道现在还真那么早?
估计到宁波还能赶上上班高峰…
小雨…还没伞
昨天一晚没睡好。今天早上6点半就出门了。经过一家网吧门口,看到七八个人还在那上网,感觉更困了…
等公交,站牌旁停了一队接新娘子的车,旁边一小伙子精神不错,蹬三轮的也已经开工了。
美好的早晨,只是我的公交怎么还不来…
…
要不是下雨,我不会坐一站公交。
长途车站里安检的机器都还没开,难道现在还真那么早?
估计到宁波还能赶上上班高峰…
今天的车票钱没白费……
有一页面,编码utf-8,设置了<meta charset=utf-8>,使用了iframe,内部的编码也是utf-8;在ie中,页面主体显示正常,iframe内乱码;FireFox等中全部正常;结果草率的下结论认为是ie的bug。
事实是ie虽然比较弱,但只要在iframe包含的页面中也添加<meta>标签设置编码,ie也是能正确显示的。
我之所以要用ConnectBot来替代系统自带的超级终端,还是和OpenVPN有关:我是用命令行连接OpenVPN的(找一个好的GUI实在不容易,TunnelDroid算是一个,可惜灵活性不够),用命令行连接时遇到的最大麻烦就是Android的内存回收机制——Android在内存不足时会优先停止在后台运行的程序,用来连接OpenVPN的超级终端很容易被关掉,虽然OpenVPN连接不会因此断开,但是要查看OpenVPN的状态或者做一些后续操作就变得复杂了。所以我需要一个不那么容易被关掉的终端……
我最初想到的是带通知功能的超级终端,后来意外发现自己已经安装的ConnectBot正是这么个东西——ConnectBot一般被用作连接远程服务器的SSH客户端,但也能通过连接local来做为一般的命令行终端使用,更重要的是它提供了通知栏功能,让程序在后台运行时也能保持连接。
东西找到了,接下来的操作就比较简单了。
1.打开ConnectBot
2.在下拉菜单的ssh,telnet,local中选择local
3.文本框中提示输入Nickname,会做为这个连接的名称,方便下次再用
4.按回车连接
后面的操作就和在系统自带的超级终端里一样了。第一次使用ConnectBot的话可能要适应下它的按键,特别是组合键,和超级终端不太一样。
ps
ConnectBot可以在官方的Market里下载。
openvpn连接意外关闭时可能会导致无法再次连接,此时可以将系统中的openvpn进程彻底关闭后再试。
先用ps命令
ps -C openvpn
查看系统中的openvpn进程号——即PID命令下面对应的数字:
然后用kill命令杀死这个进程后再连接就可以了
此方法适用于Android手机和桌面Linux。
白天做了个随机密码生成器,欢迎使用……
默认长度8位,包括大小写字母和数字
有两个可选参数l(长度length)和t(类型type)
type的值转为二进制时低三位分别对应大写字母、小写字母、数字,和ftp里表示文件读写属性的方式类似。
还是列一下吧。
1 数字
2 小写字母
3 小写字母和数字
4 大写字母
5 大写字母和数字
6 大写字母和小写字母
7 大写字母、小写字母和数字
比如要生成长度为128位的可能包括大小写字母的密码:http://bnlt.org/rp.php?l=128&t=6
本来还意外附带了测网速的功能……不过为了我的服务器的健康着想……
源代码如下:
<?php
$len=$_GET['l'];
if($len<=0||$len>1024) $len=8;
$type=$_GET['t'];
if($type<=0||$type>7) $type=7;
$len_of_list=0;
$list='';
if($type&4){
$list.='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$len_of_list+=26;
}
if($type&2){
$list.='abcdefghijklmnopqrstuvwxyz';
$len_of_list+=26;
}
if($type&1){
$list.='0123456789';
$len_of_list+=10;
}
$rp='';
for($i=0;$i < $len; $i++){
$rp.=substr($list,rand(0,$len_of_list-1),1);
}
echo $rp;
折腾了两天,终于把博客搬过来了,学到不少东西——一言难尽。
vsftpd,proftpd,apache,lighttpd,接触了很多东西,更重要的——对Linux的了解又深了,命令行也更玩得转了。
有点累啊,有空再细细道来。
在上一次的教程里,我们已经讲解了如何在Android中安装和使用OpenVPN。这次,我们要讲的是如何利用OpenVPN来突破CMWAP限制。
说到CMWAP,我想很多拥有CMWAP包月卡的Android用户(包括我)都使用过cmwrap──它让CMWAP用户能够轻松的使用Android上的大多数网络应用程序,但仍有部分自带的程序和大多数自行安装的程序让它也无能为力。而正确使用OpenVPN则能够让你的手机完全突破CMWAP的限制──但不是说OpenVPN能够取代cmwrap──OpenVPN也有自己的缺点,本文当然只讨论它的优点,我们将在后面的教程中讨论它的缺点。
本教程的所有内容建立在你已经正确安装了OpenVPN的前提下,如果没有,清先参考本教程的第一部分安装OpenVPN
如果你已经安装好了OpenVPN并且能在普通的网络环境下(例如WIFI或CMNET)成功地连接OpenVPN服务器,那么只需对原有的配置文件进行小小的更改。
打开你要使用的配置文件(如xxx.ovpn)
找到proto开头的一行,这一行一般会是
proto tcp
或
proto udp
将这一行改为proto tcp,如果没有这一行就自己加上。
我们要通过CMWAP的HTTP代理来连接OpenVPN服务器,而HTTP代理必须在TCP协议下使用。
接下来设置具体的代理,在配置文件中加入
http-proxy 10.0.0.172 80
http-proxy-timeout 20
http-proxy-retry
http-proxy-option AGENT “NokiaN90″
第一行设置了代理的IP和端口,正是我们熟悉的CMWAP网关
第二行设置了尝试的时间,超过20秒未响应就认为没有连上
第三行表示连接失败就重试
第四行是将客户端标志伪装成NokiaN90,这是为了防止移动屏蔽你使用的客户端(我不确定Android是否需要伪装,不过IE之类的确实会被移动屏蔽)
保存这个配置文件。
好了,你现在可以尝试用这个配置文件来连接OpenVPN了
进入超级终端,输入(如果你是根据我的教程来安装和命名就直接按照下面的内容输入,否则请自行调整):
cd /sdcard/openvpn/
openvpn –config xxx.ovpn –auth-user-pass auth
如果修改前的配置文件能够正常使用,并且移动没有将你的OpenVPN服务提供商列入屏蔽的名单,那么你已经能够看到标志着连接成功的Initialization Sequence Completed了,那么好的,问题来了……
请先关闭cmwrap等软件,避免在测试过程中产生干扰以致于无法正确判断真实的情况并采取相应的措施──能重启或者使用工具将其他软件都关闭更好。
打开系统自带的浏览器,访问www.ip.cn查看自己的IP
这时会出现三种情况(请确认超级终端中显示的还是Initialization Sequence Completed):
第一种,显示的IP仍然是自己所在地的移动的IP(我想绝大多数人是这一种),别怕,这不代表OpenVPN出了问题,这其实是Android系统的问题──也许是HIAPK的ROM中默认的APN的功劳。

显示的是移动的IP
第二种,显示的IP是OpenVPN服务器的IP(我想只有很小一部分人是这一种),我想你应该成功了,不过别急,喂,还没下课呢……我不能保证你每次连接都是这个结果,还是虚心看看遇到另两种情况时该怎么对付吧。

显示的是OpenVPN服务器的IP
第三种,直接提示找不到网页,尝试访问google却能连上。

由于DNS问题找不到网页
下面根据这三种情况分别进行分析:
*请先断开OpenVPN的连接(方法是在超级终端按返回键),如果你不怕折腾可以试试不断开……
对于出现第一种情况的朋友,请进入你的APN设置界面(我的是“设置>无线控件>移动网络设置>接入点名称”),查看你所使用的CMWAP接入点,
我想是和下图第一张类似,是的话,请改成第二张这样──将代理和端口清空,名称可以用自己喜欢的,改完别忘记保存。

设置了代理(这不是我们想要的)

没有代理(这才是我们要的)
Android系统中接入点的代理和端口设置只对浏览器有效,有人觉得这是bug,不过我认为这其实是设计者没有放对地方而对大家产生了误导──我觉得这个本来就是浏览器的代理设置(而不是APN的),因为即使连接了OpenVPN,这里的代理设置仍然影响浏览器,其作用方法和电脑上的浏览器的代理设置完全一样──这个代理和端口的设置就应该被放到浏览器的设置里去。
回到我们的教程……
再次进入超级终端,连接OpenVPN──刚才没有断开的朋友可能已经发现OpenVPN正在自动尝试重新连接──而且一直连不上(连上也有可能,不过几率很小,一直连不上的话请重启手机再进行这一步)。
好,等连接好了可以再次打开浏览器,访问www.ip.cn查看自己的IP(请刷新一下,防止缓存搞鬼)。
一般情况下,你会遇到上面所说的第三种情况,这是因为没有可用的DNS,解决方法如下:
呃,请进入超级终端,然后退出,再进入(其实是为了退出OpenVPN……),输入下面这行来设置一个DNS
setprop net.dns1 208.67.222.222
这里设置的正是大名鼎鼎的OpenDNS,大家闲着没事可以把自己的电脑的DNS也设成这个
再次连接OpenVPN,然后查看自己的IP。
看来应该能够出现前面所讲的第二种情况了。
这种情况下,你的手机已经突破了CMWAP的限制,就像在用CMNET或者WIFI上网。对,访问网站不会再出现乱码了,数据同步中的日历和联系人也能成功同步了(cmwrap说它不行),其他联网的程序也不在话下。
不过不要开心的太早,由于是通过超级终端来连接OpenVPN,一个不留神这个进程就可能被挤到后台运行──如果你因为太开心而迫不及待地打开很多程序去试着联网就更容易把超级终端挤跑──再过一段时节,可能就被系统的内存回收机制给“终结”了,OpenVPN连接也就中断了。
非正常的退出OpenVPN会使再次连接变得很困难──在电脑上也有这个问题──你可以选择重启后再连,也许你会觉得这很麻烦,但这已经是我所知道的最简单可靠的方法了。
本文中我们讲解了如何设置.ovpn配置文件以使OpenVPN在CMWAP下工作并提升CMWAP的价值,也讲解了APN和DNS的设置,同时提到了使用OpenVPN时可能遇到的其他问题和简单的解决方法。下一次,我们将讨论Android中OpenVPN所表现出来的缺点──更重要的是如何来避免和解决这些问题。
本文所有内容在安装了HIAPK3.01ROM的G1手机中测试通过,对于其他机型和ROM,本人不保证其完全可行。

测试机的相关参数
首先,我是一个有CMWAP包月无限流量卡的G1手机用户。
此前,我有一个诺基亚3230,我通过诺基亚的PC套件使电脑通过手机上网,并且使用OpenVPN成功地突破了移动对CMWAP限制,获得了类似CMNET的网络访问权限──不过我想更多的人用OpenVPN是因为对自由的向往──于是再后来我就将两者结合了。
那么,当我拥有了一个功能强大的并且非常依赖网络的Android手机时……
http://android.modaco.com/content/software/291919/openvpn-on-android/
这个帖子解决了我不少问题,本文的OpenVPN安装方法就是根据该帖2楼的方法并结合自己的实际情况进行调整后得出的,修改后的方法对PC端的要求更低,不需要安装adb等工具。
1.超级终端
2.ROOT权限
3.读卡器或数据线
──我用的是HIAPK3.01ROM,系统自带了超级终端并默认具有ROOT权限,其他机型和ROM可能需要先行安装超级终端并获取ROOT权限。
那么我们就开始吧,首先下载用于Android的OpenVPN软件包:http://cloud.github.com/downloads/fries/android-external-openvpn/openvpn-android-2.1.tar.bz2
解压缩,得到openvpn文件夹,结构如下:
-openvpn
-system
-bin
openssl
openvpn
-lib
libcrypto.so
liblzo.so
libssl.so
将system文件夹复制到sd卡根目录下──读卡器和数据线随你喜欢;
将卡放回手机,打开超级终端;
输入下面这行命令将系统挂载为可写:
mount -o rw,remount -t ext2 /dev/block/mtdblock3 /system
输入下面这行命令进入/system/lib/目录:
cd /system/lib/
输入下面两行命令为系统文件libcrypto.so和libssl.so做备份(它们将被新的文件替换,在修改系统文件前做备份是个好习惯):
cp libcrypto.so libcrypto-orig.so
cp libssl.so libssl-orig.so
输入下面三行命令将我们下载的三个.so文件复制到/system/lib/目录下:
cp /sdcard/system/lib/libcrypto.so libcrypto.so
cp /sdcard/system/lib/liblzo.so liblzo.so
cp /sdcard/system/lib/libssl.so libssl.so
输入下面这行命令进入/system/bin/目录:
cd /system/bin/
输入下面两行命令将我们下载的openssl和openvpn文件复制到/system/bin目录下:
cp /sdcard/system/bin/openssl openssl
cp /sdcard/system/bin/openvpn openvpn

在超级终端中安装OpenVPN
在超级终端输入下面的命令:
openvpn
如果出现大量openvpn参数的说明,就表明安装成功了。

测试OpenVPN的安装
首先将你要使用的OpenVPN的证书和配置文件复制到sd卡中──一般包括一个crt文件,一个key文件,一个或多个ovpn文件──你的OpenVPN服务提供者可能会单独给出这些文件,也可能只给你一个定制好的OpenVPN安装程序,这种情况下,你通常可以在OpenVPN的安装目录的config目录下获取这些文件。在这里,我们要新建一个名为auth的文件,在这个文件的第一行输入你的OpenVPN用户名,第二行输入密码,然后将这个文件连同前面提到的那些证书和配置文件一起放到一个名为openvpn的文件夹中(自己新建一个),最后将这个文件夹复制到sd卡的根目录下。
将卡放回手机,打开超级终端,
输入下面这行命令进入到/sdcard/openvpn/目录下:
cd /sdcard/openvpn/
输入下面这行命令连接OpenVPN:
openvpn –config xxx.ovpn –auth-user-pass auth
xxx.ovpn是你要使用的配置文件的名称,请根据实际情况调整
auth文件也一样,你可以根据自己的需要改成其他名字,注意如果你是在windows下创建了这个文件,它可能有一个隐藏的.txt后缀,在使用命令行时别忘了加上后缀
如果屏幕上最终出现Initialization Sequence Completed,则表式已经连接成功。

OpenVPN连接成功
到这里为止,我们已经介绍了Android系统中OpenVPN基本的安装和使用方法,相信大多数人已经能够成功的连上自己OpenVPN服务器,享受自由了。部分玩家甚至已经用OpenVPN突破了CMWAP的限制,不会?也没关系,我会尽快奉上本系列的第二部分──在Android中用OpenVPN突破CMWAP限制。
上个月做项目时用到了XML,自己电脑上装的是PHP5而服务器上是PHP4,于是就找到了XMLParser,确实好用。
然后联系了原作者,给它的文档页面做了个中文版本。
挺喜欢这类翻译工作的,对自己的帮助很大(当然对其他需要的人帮助也挺大,太好用了,我希望有更多人能去使用它 : ))——平时自己看文档,很多词汇甚至术语猜猜意思差不多就行了,而翻译是要对大家负责的,不确定的东西要去查证——因此做些翻译会对这个技术有更深的了解。
不多说了,上链接:XMLParser文档(中文) XMLParser文档(原文)