第二部分 技术难点及解决方案
一、技术难点 分析完整个系统的功能以后,我们来看一下关键的技术难点: (1)在线实时开通FTP帐号; (2)在线实时开通虚拟站点; (3)在线实时开通EMAIL帐号; (4)操作IIS/MSSQL/FTP/MAIL系统的启动、停止;
除以上难点以外,其他的功能无非就是简单的数据库录入、查询、修改、删除操作,所以,只要解决以上难点,系统即实现基本功能。
二、解决方案 (1)在线实时开通FTP帐号: 在这里,我们使用的FTP服务器端系统为Serv-U 6.0版,通过改写ServUDaemon.ini文件来增加、删除、修改用户。以下是增加FTP用户的原代码: <% '************************************************** '* 原作者:awaysrain(绝对零度) * '* 完成时间:2003-10-10 * '* 修改时间:2005-01-11 * '* 测试环境:WIN2000SERVER,SERV-U 6.0beta版 * '************************************************** Dim iniPath,iniFileName,iniStr,tmpStr,n Dim userName,passWord,tmp
userName = "myfso222" '用户名 passWord = "awaysrain" '密码 'tmp = "ai" '随机生成两个小写字母,(应该是随机生成的,但是我这里省略了) 'passWord = tmp & UCase(md5(passWord)) '密码,是MD5加密过的,用动网的MD5加密程序,具体算法是随机生成两位小写字母,然后和你的密码连接后进行MD5加密,把随机生成的密码和MD5加密后的结果作为密码存放,举个例子来说比如下面的awaysrain用户,我的密码为awaysrain先随机生成两位小写字母ai,和我的密码awaysrain连接得到aiawaysrain把aiawaysrain进行MD5加密得到9118BFD94A9CE9CF37AE5BAA947ED596把随机生成两位小写字母ai和MD5加密后的结果9118BFD94A9CE9CF37AE5BAA947ED596连接得到密码ai9118BFD94A9CE9CF37AE5BAA947ED596
iniPath="D:\Program Files\Serv-U" 'ini文件的路径 iniFileName = "ServUDaemon.ini" 'ini的文件名
Set fso=Server.CreateObject("Scripting.FileSystemObject") Set ServUIni = fso.OpenTextFile(iniPath & "\" & iniFileName,1,false)
iniStr = "" n = 0 addedUserList = false
Set tf = fso.CreateTextFile(iniPath & "\" & iniFileName & "._awaysrain.tmp", True) '生成新的临时INI文件
Do While not ServUIni.AtEndOfStream tmpStr = ServUIni.ReadLine
If Instr("awaysrain||" & tmpStr,"awaysrain||User")>0 Then '记录用户原来的数量 n = n+1 End If
If Instr("awaysrain||" & tmpStr,"awaysrain||[USER=")>0 and not addedUserList Then '往用户列表的部分添加现在的用户 n = n +1 tf.WriteLine("User" & n & "=" & userName & "|1|0") addedUserList = true End If tf.WriteLine(tmpStr) Loop ServUIni.Close
'添加新用户的信息,具体内容可以在SERV-U中新建用户并对照INI文件
tf.WriteLine("[USER=" & userName & "|1]") '用户名 tf.WriteLine("Password=" & passWord) '密码 tf.WriteLine("HomeDir=D:\temp") '主目录 tf.WriteLine("RelPaths=1") '是否锁定用户于主目录 tf.WriteLine("MaxUsersLoginPerIP=1") '相同IP同时登录数 tf.WriteLine("SpeedLimitDown=102400") '最大下载速度 tf.WriteLine("TimeOut=600") '空闲超时时间(秒) tf.WriteLine("Access1=D:\Temp|RLP") '可访问目录,可以不是一个,比如 'Access2=E:\Temp1|RLP'
tf.Close '--------------------备份原来的INI文件-------------------------- Set f1 = fso.GetFile(iniPath & "\" & iniFileName) f1.Copy (iniPath & "\" & iniFileName & "._awaysrain.bak") f1.Delete '--------------------把生成的临时INI文件改为正式的INI-------------------------- Set f1 = fso.GetFile(iniPath & "\" & iniFileName & "._awaysrain.tmp") f1.Copy (iniPath & "\" & iniFileName) f1.Delete
Set 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中调用这个组件 <% set CMD = server.createobject("ServerShell.Cmd") CMD.ServerCMD("cmd.exe /c C:\Inetpub\AdminScripts\mkw3site -r ""e:\inetpub"" -c ""db"" -o 88 -i 192.168.0.3 -h db -t ""testwebSite""") '创建虚拟 Web 站点 '要创建虚拟 Web 站点,请在命令提示符下键入以下命令: 'Mkw3site -r 根目录 驱动器盘符:\文件夹名 -t 新服务器名 -h 主机名 www.我的新 Web 站点.com %>
OK,现在可以通过“Internet 服务管理器”发现已经增加了一个testwebSite的虚拟站点了,这里对Adminscript下的脚本不做其他的解释了,有兴趣的朋友可以参考以下站点: http://www.uudog.com/newscontent/IIS97.html
未完待续... 
|