学院首页>网页制作>心得技巧>登录脚本的制作

登录脚本的制作

作者:郭亮 来源:未知 添加时间:2006-5-21 10:10:07
 Internet 正逐渐走入我们的生活,中国互联网络信息中心(CNNIC)1999年7月的统计结果显示我国上网的用户数已达400万,其中除去76万专线用户外,其余的256万用户通过拨号方式上网。 

拨号上网是指人们用调制解调器和电话线拨入拨号网络服务器,验证身份后登录到拨号网络服务器(或所在的网络)。通过它的出口联上因特网。目前国内上网用户的软件平台多为Windows 95/98, 其上最为普遍的登录方式是采用点对点协议(Peer-Peer Protocol,PPP),该协议在拨号用户与服务器之间建立点对点连接,以登录到服务器上。在这一登录过程中,服务器需要对远程用户有个身份验证,反应到操作中就是需要用户输入帐号与口令,接收用户输入的帐号与密码后,服务器经验证无误后,让用户登录,若验证失败,则不让用户登录。 

在Windows 95/98中,提供了一个拨号连接程序给拨号网络用户使用,它的使用方法比较方便,在用可视界面对拨号过程进行一些配置后,即可连接使用。一般情况下,在连接程序的窗体中输入帐号密码后,登录的验证过程可在后台进行而不需用户的干预。但有时,所登录的服务器需要两次验证(往往是在路由器上多了一层验证),这样,第二次验证过程就无法在后台进行了,用户只能将登录选项改为“拨号后出终端窗口”,通过手工输入帐号密码完成第二次验证。由于帐号密码较难记忆,在终端窗口中又不能修改,往往容易因为输入错误而导致验证失败,不仅给用户带来不方便,也浪费了不少宝贵的电话费。 

由于一般用户对服务器端的设置无可奈何,第二次的验证无法避免,但若能使其自动化,也就克服了手工输入的缺点了。为了实现这个功能,就要用到登录脚本。 

登录脚本,顾名思义就是为了登录过程写好的脚本文件,通过文件中存储的命令行与服务器进行交互,自动完成登录过程而不需人工干预。也许有人会认为既然是跟服务器进行通讯,它所用的语言一定高深末测,但实际上,如果对它稍加分析,变会发现它其实并无太多的奥秘。 

在windows 95/98中的Program Files目录中有个Accessories目录,其中有几个后缀为scp的文件,即为登录脚本文件的示例,其中pppmenu.scp是PPP登录方式的示例脚本。一个脚本文件都必须有一个名为‘Main’的过程(即一段程序),所有的脚本文件都从‘Main'开始执行。脚本中的注释以‘;’开始。下面就以pppmenu.scp为例,讲讲怎样制作一个脚本文件,需要说明的是示例中的主机(host)即上述的服务器。 

本脚本文件示例怎样与一个有菜单系统的主机建立一个PPP连接。脚本文件中的过程(一段程序)以 “Proc 过程名” 开始,以 “Endproc”结束; 


main 过程
proc main
; 以下的变量要根据您的拨号网络服务器不同而做写改动
; 将登录失败时重试的次数置为3
integer nTries = 3
; 定义登录时的提示信息,将下句中的"Username:" 替换为
; 您的主机在询问帐号时的提示信息,如"UserID:"等
string szLogin = "username:"
; 将帐号的超时时间设为3秒,即若输入帐号后3秒中主机不响应
; 用户即超时,此次登录视为失败。
integer nLoginTimeout = 3
; 定义系统要求密码的提示信息与超时设置
string szPW = "password:"
integer nPWTimeout = 3
; 这里定义您输入正确的帐号密码后出的提示,请按您
; 的主机提示更改该变量的值
string szPrompt = "annex:"
; 如果您的主机在验证后显示菜单要求用户选择的话,
; 假设有如下菜单:
;1: Our special GUI
;2: Establish slip connection
;3: Establish PPP connection
;4: Establish shell access
;5: Download our software
;6: Exit
;Please enter a number to select it!
; 定义要选择的菜单项,如下的例子选择3,"^M"代表回车
string szConnect = "3^M"
; 如果不想在脚本中得到IP地址,将下列值设为False,
; 一般情况下不用在脚本中得到IP地址,建议将其用';'注释掉。
boolean bUseSlip = FALSE
; 各变量定义完毕,下面将开始执行程序
; 延迟2秒以免主机来不及响应,建议将时间改短或注释该句
delay 2
; 发送两各回车给主机,若非特殊需要,建议注释该句
transmit "^M^M"
; 当重试的次数小于规定的最高次数时,继续尝试登录
while 0 < nTries do
; 在输入帐号之前,等待登录提示,直到超时,
; 若出现帐号提示后,跳转到以Dologin为标签开头的语句执行,
; 执行到最后返回调用点
waitfor szLogin then DoLogin
until nLoginTimeout
; 以TryAgain标签语句开始的程序段
TryAgain:
; 重试时先输入一个回车键,若主机不需如此,请注释掉
transmit "^M"  ; ping
; 因为已重试过,故将重试次数减1
nTries = nTries - 1
; 循环语句的结尾
endwhile
; 跳转到已BailOut为标签的语句执行;即转成人工输入
goto BailOut
; 以DoLogin标签语句开始的程序段
DoLogin:
; 输入帐号,请将真实帐号边上加双引号替换下面的$USERID
transmit $USERID, raw
; 敲回车将帐号传给主机
transmit "^M"
; 等待主机出输入密码提示
; 在超时时限内等待输入密码提示
waitfor szPW until nPWTimeout
; 若超时,跳到以TryAgain标签开始的地方重试
if FALSE == $SUCCESS then
goto TryAgain
endif
; 输入密码,请将真实帐号边上加双引号替换下面
的$PASSWORD
transmit $PASSWORD, raw
; 敲回车将帐号传给主机
transmit "^M"
; 等待主机出验证成功提示
waitfor szPrompt
; 若有菜单项,选择菜单
transmit szConnect
; 若不需取得IP,建议将下面一段注释掉
if bUseSlip then
; 下列两种情况只能取一,请将另一种注释掉
; 若知主机的IP提示,将显示IP前的提示替换下面的
"Your address is "
waitfor "Your address is "
set ipaddr getip
; 若不知主机的IP提示,执行下面一句取得IP
set ipaddr getip 2
; 结束If语句
endif
;跳出脚本文件
goto Done
; 以BailOut标签语句开始的程序段
BailOut:
; 出现一些不能响应的错误,将键盘打开,接受用户手工输入
set screen keyboard on
; 停止脚本文件运行
halt
; 以Done标签语句开始的程序段
Done:
;结束运行当前程序段
; 过程结束
endproc

将上述脚本按您的主机的情况在文本编辑器中配置好后,存成一个.scp文件, 在连接属性中的“制作脚本”标签中将该文件的完整名填入框中,同时选中拨号时最小化终端窗口。另外在“常规”标签中调制解调器的设置中,在选项的标签下去掉“拨号后出终端窗口”选项。 

此时再拨号,帐号密码通过第一次验证后,在状态条中出现一个最小化的终端窗口,恢复它的窗口尺寸后就会发现,它与原来的终端窗口几乎一样,唯一的不同是在也不用麻烦您输入什么了,在自动验证完毕后该窗体会自动关闭,这时,您就可以畅游Internet的海洋了。 

脚本在给您带来不少方便的同时,也有一个致命的弱点,那就是保密性差了,因为我们把密码用明文写在文件里了,这样,所有能看到该文件的人都有可能知道密码。所谓有得有失,在方便与保密之间,想您会有自己的选则。 
站内搜索