拨号上网是指人们用调制解调器和电话线拨入拨号网络服务器,验证身份后登录到拨号网络服务器(或所在的网络)。通过它的出口连上因特网。目前国内上网用户的软件平台多为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的海洋了。
脚本在给你带来不少方便的同时,也有一个致命的弱点——保密性差,因为我们把密码用明文写在文件里了,这样,所有能看到该文件的人都有可能知道密码。所谓有得必有失,在方便与保密之间,我想你会有自己的选择。
摘自《计算机世界日报》
编后:想想平时每天上网时都要重复地输入用户名及口令——虽然安全(其实也不一定,还是有很多其它方法也可以“偷”到密码),但也有些让人厌烦……所以,这篇文章介绍的就是一个“一劳永逸”的方法。至于密码明文保存的问题,只要是在家中上网,那还有什么可怕的?!
|