|
发表于 2006-7-28 10:20:22
|
显示全部楼层
[转载]Dr.com在linux下的客户端使用指南
原始连接:http://student.qust.edu.cn/blog/user1/11/archives/2006/99.aspDr.com
Dr.com是在全国广泛使用的宽带计费系统,但是却没有提供linux下的客户端,但是有linux爱好者开发了非官方的版本-drcom-client,本文即对drcom-client在linux若干发行版的使用做详细的描述。点击此处可以下载
1.前言:
Dr.com 是城市热点公司开发的宽带计费系统,在全国高校,企业,政府机关广泛使用,但是遗憾的是这么大的企业居然没有开发Linux下的客户端,虽然Dr.com 可以在web浏览器下完成登陆验证注销等工作,但是很多学校和ISP取消了这样的功能,而取而代之是windows下专用的客户端。
由于没有客户端,所以Linux上网成了问题,通常的解决方案是利用代理服务器接入,利用wine模拟运行drcom的官方客户端,但是这样做并不是完美的解决方案,例如使用代理服务器对于端口有限制,并且某些软件并不提供设置代理的功能,而利用wine模拟运行在Dr.com 2.95版本不能成功,至少我还没有看到有成功的案例,在本人学校没有,在网上也没有看到有例子。为了解决此问题,有爱好者对Dr.com的联网原理进行分析,开发了 Dr.com的客户端,我记得最早是在2004年就有相关的文章来分析了,具体情况可以Google一下,在这里再次要感谢这些先驱们。本人的学校从去年开始才正式的运行Dr.com进行校园网络的控制和管理,我也是到了今年才开始关注这个,我想做一个Linux的客户端,上网查到了drcom- client。drcom-client现在是sourceforge上的一个项目,以GPL协议发布,它包括window平台下的版本drcom- client-win32和Linux下的版本drcomsuite,它的主页地址是:http://sourceforge.net/projects/drcom-client。本文主要介绍Linux下的版本drcomsuite在Linux几个主流发行版的使用,它的主要作者是wpyh,drcomsuite到现在已经比较成熟了,可以应用于2.4.x内核和2.6.x内核。但是wpyh的第一语言不是汉语,所有的文档是以英文发布的;另外使用文档也不完善,这样对于开发者或者熟悉linux的人也许不成问题,但是对于使用Linux的普通用户和Linux的新手们就有些困难了。还有就是这个客户端是在北京海淀区的宽带接入应用环境开发的,它的测试区在北京海淀宽带联盟论坛,这是一个内部网站,仅面向海淀宽带的用户,而且关闭了注册,我现在得到的消息是借助google搜索提供的零星的片段(要登陆论坛才可以查看全文内容),所以我现在连wpyh其人也不是很了解。
我准备在drcom-client的基础上开发更人性化功能的Dr.com客户端,并且提供基于GTK的图形界面版本,现在windows下的版本已经比较好用了,但是也缺乏一个用户指南,用这个开源的版本带来的好处是:支持共享上网,不会默认打开某些网站(我就特反感这个,本人机器比较慢,原来用windows的时候自动打开IE连到校主页,要等好几秒的时间,不爽)而Linux下的版本能用了,但是还存在某些bug,比如有的时候不稳定,不能登陆成功;有的时候退出的时候,进程会无法正常中止;这些都还不是大问题;现在最大的问题是安装使用起来有点困难,特别是对于Linux新手,或者说只是普通用户而言。我在http://www.gro.clinux.org上申请开通了一个项目,叫做q-drcom,项目主页就是https://gro.clinux.org/projects/q-drcom/;名字中q的意义一方面是本人在学校所在的工作组名字的首字母,所以开发的东西会叫做q-xxx;另外q是cute的意思,cute在英文中意为灵巧的,漂亮的,惹人喜爱的意思,这是我做东西的一个原则:,它能怎么样跑得最快?怎么让人喜欢它?解释了这么多,就是想让你记住它,如果你对使用drcom有什么问题你就能到项目主页上寻求答案了;说实在的,本人也不是什么开发高手,并且对于Linux下的编程,特别是内核模块方面的也是在学习中,drcom- suite的源代码我正在消化,但是我有信心不久之后就推出q-drcom的beta版本;所以目前q-drcom项目暂时只是提供drcom- client的用户支持,除了文档而没有自己的东西出来,并且从用户的反馈和问题,也能让我更好的发展q-drcom,---A cute version of Dr.com's client!所以也请大家有使用上的问题及时反馈,更希望有更多的志愿者加入到其中来。看到城市热点的官方主页上说在高校的应用有300多家,按我的理解就是:有多少在高校的成功案例,就有多少个高校里的linuxer被奴役!
2.基础知识:(对于Linux新手,其他人可以跳过)
(1)Linux从源代码安装软件的一般过程是Configure,make,make install;configure是一个shell脚本,负责根据机器或用户的的设置生成一个叫Makefile的文件。
而make 命令就是让编译器(gcc等)根据Makefile文件自动的编译和连接以生成目标代码(可执行文件,在windows下就是exe文件);make install就是根据Makefile的表述把目标代码以及相关的文件拷贝的设定的目录。简单说,make就是Unix,Linux平台下的工程管理器,它能自动编译和安装软件。对于某些软件的安装,也就是最后一步(这里假设你在自己的家目录中完成了前面两步)需要root用户权限,因为make install可能要把一些文件拷贝到之有root用户有权限写入的目录,对于本文中要安装的drcom-suite就是如此,它要将一些文件拷贝到 /sbin ,/etc等目录中,另外,在本例中drcomsuite的安装不要用Configure,它也没有提供这个脚本,它已经提供了Makefile,直接运行make,make install就可以了。
(2)软件是有相关性的,一些程序为另外的程序提供服务,所以软件的安装是有顺序的,并且有的时候不能颠倒(有新手要不耐烦了,发难了,windows下怎么没有那么麻烦阿?windows下有dll文件,叫做动态连结库,你双击安装的 exe程序已经把它要用的那些库打包到exe文件里面,安装时就提取出来放到它的安装目录了,写过vb的知道,你写个程序但是不把一些dll文件打包安装,它在没有装VB的机器上就不能运行,基本道理一样,另外一般windows下的软件都是以二进制可执行文件的形式发布,而不是源代码,“Linux is not windows ”,所以请不要总是把时间花在它们的比较之上。我之前不用windows是我买不起正版windows,我对自己的要求是:如果我还写代码,那么我就尽可能不用盗版软件,我必须尊重其他的软件作者。当然,为什么尽可能呢,如果老师让我交AutoCAD的课程设计,那我该怎么办呢?但是,请你相信,当你开始了解了linux,并且尝试用它来解决你的学习工作的问题,而不是把它当玩物,那么你会象我一样对它如痴如醉的,这让我想起了一句名言:学一点点知识是一件可怕的事情 。当然,整天打游戏的人除外,呵呵,整天打游戏的人也不会看这篇文章了),具体来说,在本例中一定要先安装libdrcom,只有先安装了 libdrcom,drcomsuite才可能编译成功,因为drcomsuite的编译需要libdrcom,不完善的说法是编译drcomsuite 时需要libdrcom的一个drcom.h的头文件,安装了libdrcom之后,drcom.h文件会被拷贝到/usr/include文件夹中,这样编译drcomsuite时编译器才能找到drcom.h;这是drcomsuite在一般发行版本上的需要注意的地方,另外对于特定的发行版本还有其他的东西,比如在ubuntu 5.10的安装,还要依赖其他的东西,这个在后面特定的发行版的说明中具体讨论。
(3)gcc的版本问题。开源软件之所以这么有活力的一个原因就是来自全世界的黑客们都在持续的改进它们的程序,版本会不断的升级,会越来越趋向于完美。版本的更新换代太快,但是这也是被某些商业软件的支持者指责的地方,版本的更新太快造成维护上的成本增加。这简直是跟QJ了某女然后把责任推托说是“怪你过分美丽”上一样没有道理!(不好意思,偏激了,我不恨微软,甚至有些同意某些人说的,不知道对不对,我只是引用不加评论,“如果没有微软,计算机就不会如此老少皆宜”,微软提供了漂亮的界面,易用的操作方式,在中国更是如此,拿三块钱买一张盗版光盘,马上就有一个可用的系统了;但我转向linux之后,我惊喜的发现 linux可以跟window xp一样漂亮,甚至更漂亮,而我居然开始喜欢了命令行的操作方式,这个可以更高效!唉,废话有点多,见谅)不同的gcc版本用于编译的参数可能不一样,它可能不支持某个Makefile中给的gcc编译参数,在本例中就是如此,造成了在某些发行版本上不做某些改动就不能编译成功。还有,如果你要编译内核的模块,那么一定要用和当前内核相同的gcc的版本,系统上缺乏编译内核所用的gcc版本,就可能造成编译drcomsuite中就可能不成功,这个问题在 ubuntu 5.10上体现了,后面会详细提到。
(4)内核头文件与内核模块。有了内核头文件,你才可能编译内核的模块,一个简单的例子就是需要编译一个设备的驱动程序。内核模块是可以动态载入内存的,比如你通常的网卡,声卡驱动都是编译成模块的 ( 也可以编译进内核,根据内核配置文件)。运行/sbin/lsmod可以查看现在在内存中的模块。这个问题也出现在我在ubuntu 5.10下测试时,这个问题在后面ubuntu下的安装那一节具体来讲。
3.drcomsuite在各主要发行版下的安装
(1)在redhat 9下的安装
首先从drcom-client的项目主页http://sourceforge.net/projects/drcom-client上下载libdrcom-0.0-20050423-2.tar.bz2和drcomsuite-0.1.12.tar.bz2两个文件, 记得要先安装libdrcom,解压缩:
tar -xjvf libdrcom*.bz2
tar -xjvf drcomsuite*.bz2
转换到root用户完成编译和安装:
su
#输入你的root用户密码
#进入libdrcom的目录
cd libdrcom*
#redhat9会由于默认的gcc版本的原因,需要稍微修改Makefile文件,用你喜欢的编辑器打开Makefile
vi Makefile
#注意到其中有这样的一行,第三行 WARN = -Wall -Wextra -Wstrict-prototypes -Wmissing-prototypes -pedantic
#把-Wextra改成 -W
#然后运行make和make install编译
make
#等待,你应该可以编译成功,然后安装
make install
按照同样的作法,进入到drcomsuite的目录,然后make ,make install编译安装drcomsuite,所不同的是 drcomsuite中的Makefile 本来就是带的-W,所以不需要改。
如果这都没有出现错误的化,那么恭喜你,你已经成功了一半了,现在我们来看配置文件。
drcom 的配置文件是/etc/drcom.conf,安装drcomsuite时已经把一个叫做drcom.conf.new的文件拷贝到你的/etc目录下,所以你需要把它改名为drcom.conf,然后完成相应的配置,里面有简单的英文提示,应该不成问题,有下面几点要注意的:
1.
username=cyi_02 #用户名
password=*******# 你的密码
mac= #mac地址,可以通过运行ifconfig命令查得本机的mac地址,类似如 00:00:E8:18:07:69的形式
nic0=10.1.43.190 #你的IP地址,一般都是单网卡用户,后面的空白
nic1=
nic2=
nic3=
dnsp=202.113.32.6 #主dns
dnss=211.94.193.129 #次dns,这个必须填,不填程序会出错,如果没有次dns,填一个合法的ip地址
dhcp= #一般都不是由dhcp指配的ip,所以这里也留空
hostip=
servip=192.168.100.251 #输入你用drcom时打开浏览器被自动引导如提示你登陆的那个地址就可以了,这个是我们学校的登陆地址,其他的留空默认
hostport=
servport=
#后面的四项是用来假冒windows xp主机的,不填就可以了。
hostname=
winver=
winbuild=
servicepack=
这样配置文件就好了,接下来就可以来上网了,下面的命令都需要你用root用户来运行
su切换到root用户,因为你是以普通用户运行的,所以你的搜索目录里面可能没有/sbin,所以你运行source来读取root的环境变量设置
source /etc/profile
modprobe drcom
drcomcd #运行drcom的守护进程
如果提示类似于下面的这样的信息,那么就表示启动成功了,如果不是,你需要检查你的配置文件drcom.conf是否有语法错误:
1139480048 DEBUG drcomcd: Redirecting stderr to /var/log/drcomcd...
登陆,在终端输入命令:
drcomc login
提示这样的信息:
1139480181 DEBUG drcomc: Creating socket...
1139480181 DEBUG drcomc: Connecting...
1139480181 DEBUG drcomc: Sending login command...
1139480181 DEBUG drcomc: Receiving reply (login)...
Login succeeded
表示你登陆成功了,这样你就可以上网了!如果有提示出错信息,比如你就要确认你的帐户是不是用完了,然后再杀掉drcomcd并且再次启动,或者从新引导一次系统试试,一般是不需要的。但是有可能有不稳定,随机的情况出现。
#杀掉drcomcd
killall drcomcd #同样需要你以根用户的身份运行
用redhat9 基本会成功的,本来它的开发就是基于2.4内核, redhat 9基于2.4.20内核。 drcom.o是2.4内核的内核模块,当你安装drcomsuite时它被安装到了/lib/modules/{kerner_version} /kernel/misc中;{kernel_version}代表你的内核版本号。
用fedora core4的差不多,只是fedora的gcc比较新,所以编译的时候Makefile文件是不用修改的,其他的过程一个样,2.6内核的后缀名为 .ko; drcom.ko被安装到了/lib/modules/{kernel_version}/kernel/extra目录中。
我自己的机器在宿舍里锁着了,装的是gentoo2005.1,现在工作室里没有gentoo的机器,安装过程也一个样,但是我记得刚刚考完研放寒假时我安装之后的gentoo联网不成功,提示说failed,reason 0;但是那个时候可能是学校网络的原因,我觉得应该可以成功的,毕竟这边三台机器全部成功了。
(2)drcomsuite在ubuntu 5.10下的安装
下面具体说一下在ubuntu的安装过程,可能要稍微复杂一点,因为ubuntu是开发来用做服务器或者桌面应用的,但是在开发方面可能就要考虑少一点,但是不是说它不合适做开发,有了apt,有了“新立得”什么拿不到呢?并且我们的工作站就是装ubuntu,只不过你在做内核方面的东西时要装些东西上来,让它具有这个环境,ubuntu的设计理念是“Linux for human beings”,所以预装的软件包不会包括编译环境。ubuntu非常的漂亮,没有其他的一些复杂的东西要设置,放上去就能用,所以选它做事情是非常合适的,我很喜欢它!具体的安装我就不说了,在ubuntu中文网站上有详细的教程,http://www.ubuntu.org.cn, ubuntu中文上的资料非常的好而且多, ubuntu很适合新手,我觉得在这个方面比fedora还好(那个yumex真的有够“郁闷”的,运行慢,与“新立得”比差远了,还有源就清华还有个freshrpms的镜像,个人意见)。
首要因素是你要安装 build-essential
如果你没有安装过,请利用下面的命令安装
sudo apt-get install build-essential
当然你可以用“新立得”,我就很喜欢新立得!
你需要做的第二件事就是安装libssl-dev,这个包包括了drcom需要用到的用于认证加密的md5函数,它需要一个md5.h的头文件,而这个文件在libssl-dev中有,另外libssl-dev还包括了其他好多的用于加密的头文件哦。
第三,你需要安装对应内核版本的头文件,这个用 uname -r命令可以得到关于你机器的信息,比如我的:
uname -r
2.6.12-10-686
这是我的内核版本,我用的是Intel P4的CPU,所以我安装的是这个内核,ubuntu默认安装的是 2.6.12-9-386,当你第一次系统更新时就会安装 2.6.12-10-386,然后一般人都会根据自己的CPU类型选择合适的内核版本,AMD用户会选择 2.6.12-10-k7;
另外你得到信息的方法就是查看/proc/version文件,这里有你机器的一般信息,包括编译内核采用的gcc版本,这也是呆会要用的。
cat /proc/version
比如我的信息显示为:
Linux version 2.6.12-10-686 (buildd@rothera) (gcc version 3.4.5 20050809 (prerelease) (Ubuntu 3.4.4-6ubuntu) #1 Mon Jan 16 17:58:04 UTC 2006
它不但告诉了我内核版本还告诉了我gcc的版本是3.4.5,因为你编译新的内核模块时要用到和编译内核同样版本的gcc版本。
那么就在你的“新立得”里面搜索“linux-headers”找到你需要版本的linux头文件
Linux-header-file-{yourversion},比如我的就安装linux-header-2.6.12-10-686
虽然你刚才已经安装了编译的环境build-essential,但是安装的gcc版本是更新的4.0版本,它在用来编译内核模块时是不合适的。
在你的“新立得”搜索gcc,安装gcc3.4,至此你就建立了一个可以编译drcomsuite的环境了,按照前面的方法编译安装。
ubuntu 有它的一套,它不能su到root帐户,你可能愿意开启一个root shell,那么就运行sudo -s -H; 完成你的编译安装,如果你按照在“在redhat中的安装”这一节详细介绍的,编译安装了,配置了。但是你可能当运行modprobe时提示找不到 drcom模块,至少在我这里是这样;这个不用着急,你用root权限,把drcomsute编译目录下的/modules/Linux/2.6.x/下的drcom.ko文件复制到/lib/modules/{kernel_version}/kernel/drivers/net下就可以了,复制到其他目录也可以,在这里我认为它是一个网络驱动。所以我复制到这里driver/net文件夹中。
还差一步:运行如下的命令自动建立模块的依赖关系:
depmod -a
如果你不运行上面的命令,可能当要载入模块时就会提示找不到模块。
接下来,你就可以modprobe drmod把drcom载入内存了。
然后就是正常的使用步骤了,具体操作参照“在redhat 9下的安装”这一节。
终于写完了,我现在能做的也就是这么多了,由于个人水平所限,如果上面的文档中有什么错误欢迎指出来,您有什么问题,或者对这个项目感兴趣,都可以发送邮件到alva.yi At gmail Dot com.
希望我所做的工作对于在高校或者其他地方的被Dr.com所“禁锢”的linux用户有作用,还等什么,不用担心你用linux上不了网了,从你的电脑上分出几个G出来装linux用吧,分多点,至少5个G吧,别只是玩它,装些有用的东西,实际的用它来解决你的工作和学习上的问题!也别满足于在虚拟机上,毕竟虚拟机只是虚拟机,据个人经验,gentoo就在VMware station 4.0上装不成(在windows xp上,盗版的 ),另外在一个操作系统上跑另外一个操作系统,内存只有一半了,这样你就总是以为linux慢了,其实它一点也不慢,另外如果你是开发者,用linux可以让你工作得更舒服,比如笔者自己的机器只有1.2G,256M,但是用gentoo,只用了一个fvwm和Rox-filer做桌面环境,这样我就不用看着某些程序干着急了。另外满足Ri常的需要,linux足够了,QQ聊天,MSN,浏览网页,下电影……引用某个牛人的话说:“linux不是只是计算机系的才用的,linux也不是只有男生才用的”,我就不是计算机系,但是我是男生~~hehe 希望06年开学听到大家能上网的消息!
最后,再次感谢开发drcom-client,drcomsuite的开发者,协议分析者,以及其他贡献者!
Vulcan
2006-02-09
Contact me at:
MSN:yi_can At msn Dot com
OICQ:173590786(seldom online)
Email:alva.yi At gmail Dot com
----With Linux,With Joy----
More information at the home page of q-drcom project:
https://gro.clinux.org/projects/q-drcom/
http://q-drcom.gro.clinux.org |
|