制作虚拟主机管理系统(二)

第二部分 技术难点及解决方案

一、技术难点
分析完整个系统的功能以后,我们来看一下关键的技术难点:
(1)在线实时开通FTP帐号;
(2)在线实时开通虚拟站点;
(3)在线实时开通EMAIL帐号;
(4)操作IIS/MSSQL/FTP/MAIL系统的启动、停止;

除以上难点以外,其他的功能无非就是简单的数据库录入、查询、修改、删除操作,所以,只要解决以上难点,系统即实现基本功能。

二、解决方案
(1)在线实时开通FTP帐号:
在这里,我们使用的FTP服务器端系统为Serv-U 6.0版,通过改写ServUDaemon.ini文件来增加、删除、修改用户。以下是增加FTP用户的原代码:

 1   
 2'**************************************************   
 3'* 原作者:awaysrain(绝对零度) *   
 4'* 完成时间:2003-10-10 *   
 5'* 修改时间:2005-01-11 *   
 6'* 测试环境:WIN2000SERVER,SERV-U 6.0beta版 *   
 7'**************************************************   
 8Dim iniPath,iniFileName,iniStr,tmpStr,n   
 9Dim userName,passWord,tmp 
10
11userName = "myfso222" '用户名   
12passWord = "awaysrain" '密码   
13'tmp = "ai" '随机生成两个小写字母,(应该是随机生成的,但是我这里省略了)   
14'passWord = tmp & UCase(md5(passWord)) '密码,是MD5加密过的,用动网的MD5加密程序,具体算法是随机生成两位小写字母,然后和你的密码连接后进行MD5加密,把随机生成的密码和MD5加密后的结果作为密码存放,举个例子来说比如下面的awaysrain用户,我的密码为awaysrain先随机生成两位小写字母ai,和我的密码awaysrain连接得到aiawaysrain把aiawaysrain进行MD5加密得到9118BFD94A9CE9CF37AE5BAA947ED596把随机生成两位小写字母ai和MD5加密后的结果9118BFD94A9CE9CF37AE5BAA947ED596连接得到密码ai9118BFD94A9CE9CF37AE5BAA947ED596 
15
16iniPath="D:\Program Files\Serv-U" 'ini文件的路径   
17iniFileName = "ServUDaemon.ini" 'ini的文件名 
18
19Set fso=Server.CreateObject("Scripting.FileSystemObject")   
20Set ServUIni = fso.OpenTextFile(iniPath & "\" & iniFileName,1,false) 
21
22iniStr = ""   
23n = 0   
24addedUserList = false 
25
26Set tf = fso.CreateTextFile(iniPath & "\" & iniFileName & "._awaysrain.tmp", True)   
27'生成新的临时INI文件 
28
29Do While not ServUIni.AtEndOfStream   
30tmpStr = ServUIni.ReadLine 
31
32If Instr("awaysrain||" & tmpStr,"awaysrain||User")>0 Then   
33'记录用户原来的数量   
34n = n+1   
35End If 
36
37If Instr("awaysrain||" & tmpStr,"awaysrain||[USER=")>0 and not addedUserList Then   
38'往用户列表的部分添加现在的用户   
39n = n +1   
40tf.WriteLine("User" & n & "=" & userName & "|1|0")   
41addedUserList = true   
42End If   
43tf.WriteLine(tmpStr)   
44Loop   
45ServUIni.Close 
46
47'添加新用户的信息,具体内容可以在SERV-U中新建用户并对照INI文件 
48
49tf.WriteLine("[USER=" & userName & "|1]") '用户名   
50tf.WriteLine("Password=" & passWord) '密码   
51tf.WriteLine("HomeDir=D:\temp") '主目录   
52tf.WriteLine("RelPaths=1") '是否锁定用户于主目录   
53tf.WriteLine("MaxUsersLoginPerIP=1") '相同IP同时登录数   
54tf.WriteLine("SpeedLimitDown=102400") '最大下载速度   
55tf.WriteLine("TimeOut=600") '空闲超时时间(秒)   
56tf.WriteLine("Access1=D:\Temp|RLP") '可访问目录,可以不是一个,比如 'Access2=E:\Temp1|RLP' 
57
58tf.Close   
59'--------------------备份原来的INI文件--------------------------   
60Set f1 = fso.GetFile(iniPath & "\" & iniFileName)   
61f1.Copy (iniPath & "\" & iniFileName & "._awaysrain.bak")   
62f1.Delete   
63'--------------------把生成的临时INI文件改为正式的INI--------------------------   
64Set f1 = fso.GetFile(iniPath & "\" & iniFileName & "._awaysrain.tmp")   
65f1.Copy (iniPath & "\" & iniFileName)   
66f1.Delete 
67
68Set fso = nothing   

这里我对原作者的程序进行了一点修改,把原有的对密码的加密去了,这样,存在INI文件中的密码是直接看见的,为什么要这样呢……因为6.0和4.2的加密算法好象不大一样( 如果有知道加密算法的朋友请告诉我 ),而且,我们现在做虚拟主机管理系统的重点也不在这里,所以把这一部分舍去了。此处的SERV-U的设置有以下几点需要注意的:
1 必须已经有一个域,且有至少一个用户存在的情况下,才能成功。
2 因为去除了对密码的加密算法,所以在域的设置里的高级选项中的“将密码存储于加密的窗体中”选项去除。

(2)在线实时开通虚拟站点:
为了将来能满足域名转向功能,所以,我们这里要求在线实时开通“虚拟站点”,而不是开通“虚拟目录”,目录是不能控制转向的。
网上找了一些资料可以建立虚拟站点的,可是都失败了……不知道为什么,比如通过“ADSI修改IIS信息”,不行,提示“权限不够”。后来查了些资料,发现基本上都是通过c:\Inetpub\adminscript下的VBS脚本来实现对IIS的管理的,我通过ASP来调用时,出现了权限不够的问题,所有就换个思路,通过组件来调用这些脚本来控制IIS。
首先先些了个VB的组件:
一、建立一个ActiveX DLL工程
二、更改工程名ServerShell
三、更改类名:Cmd
四、修改类代码:
Public Function ServerCmd(strCMD)
Shell strCMD, vbHide
'就这么简单就行了!
End Function
五、生成并注册DLL文件

然后在ASP中调用这个组件

1   
2set CMD = server.createobject("ServerShell.Cmd")   
3CMD.ServerCMD("cmd.exe /c C:\Inetpub\AdminScripts\mkw3site -r ""e:\inetpub"" -c ""db"" -o 88 -i 192.168.0.3 -h db -t ""testwebSite""")   
4'  创建虚拟 Web 站点   
5'要创建虚拟 Web 站点,请在命令提示符下键入以下命令:   
6'Mkw3site -r 根目录 驱动器盘符:\文件夹名 -t 新服务器名 -h 主机名 www.我的新 Web 站点.com    

OK,现在可以通过“Internet 服务管理器”发现已经增加了一个testwebSite的虚拟站点了,这里对Adminscript下的脚本不做其他的解释了,有兴趣的朋友可以参考以下站点:
http://www.uudog.com/newscontent/IIS97.html

未完待续...

Published At
Categories with Web编程
Tagged with
comments powered by Disqus