|
===================
使用SecureCRT登录路由器 | ||
看到这个题目,想必大家一定觉得很无聊,但如果你看完了,一定会惊呼SecureCRT功能的强大。
大家以前可能大部分都是用Windows自代的Telnet程序或是通过Putty来连接Dynamips虚拟的路由器,但Telnet功能太单一,复制粘贴也不方便,我一开始就不用它,除非是该机器上没有其它程序。Putty呢,功能不少,程序也不大,还是一个绿色单一文件,确实很好,但是,如果你想登录多个网络设备,就要开多个Window窗口,弄得系统任务栏上都是putty的窗口,虽然WinXP可以对任务分组,但要找登录到某一设备的任务还是比较麻烦的。讲到这里,大家肯定马上就想到了SeucreCRT,不错,是这个软件。下面就详细说说。 SecureCRT的功能确实强大,强大到哪里,一般的功能就不说了,单纯支持JS或VBS脚本,就非常了不得,当然,在这里我还要提一下它的标签(TAB)功能。也就是说,给一个任务,不是新开一个Windows窗口,而是新建立一个标签(就象IE和Maxthon的区别一样)。此外,SecureCRT除了传统的图形化界面之处,还支持命令行参数功能,就是这一项和VBS脚本结合,才实现我要说的主题。 在Dynagen的命令行输入telnet R1(当然R1这个设备得存在),是开启windows的Telnet还是Putty或是SecureCRT,是由一个配置文件dynagen.ini 决定的,这个文件存在于dynagen安装好的目录中(当然,绿色版本另当别论,自己找一找吧),用文本文件编辑器打开,找到这些行: #telnet = start telnet %h %p #telnet = start putty.exe -telnet %h %p telnet = start secureCRT.exe /T /telnet %h %p 注:#是注释的意思 如果想用Win自己带的Telnet,用第一行,如果想用putty,用第二行(要确保putty在系统路径中),想用SecureCRT,就用第三行(我就是这么用的)。这里需要说明一下参数的意思:secureCRT.exe就是安装好SecureCRT后的可执行程序,当然,你要确保它在系统路径中(什么意思?晕,把你安装好的路径,如:C:\Program Files\SecureCRT,追加到系统的path变量上,方法很多,这里超出范围,不再赘述)。/T是一个secureCRT的参数,意思是新开一个标签,注意,这个参数只有SecureCRT 5.2及以后版本才有,其它版本没有。/telnet的意思是走Telnet协议,%h是要telnet到的主机,%是要telnet的主机的端口。 做到这里,你只能在Dynagen的命令行输入telnet R1时,开启SecureCRT或是新开一个标签来连接R1,些时,每个设备的标签都是相同的,这就没有意义了,想要找某个设备,还是比较困难,怎么办?我找遍了SecureCRT的命令参考,也没有找到好办法,后来觉得还是用VBS比较好。下面是一个脚本,主要是用来解决每个设备一个标签名字的问题,顺便解决了连接路由器需要敲无数回车或是输入“No”等一系列我认为必须设备的路由器命令。下面先看一下,再做解释(文件名为DyCRT.vbs,当然,你也可以自己命名): #$language = "VBScript" #$interface = "1.0" Option Explicit Function mysubstring(srcString,bChar,eChar) Dim fIndex,sIndex fIndex=InStr(srcString,bChar) sIndex=InStrRev(srcString,eChar) mysubstring=Mid(srcString,fIndex+1,sIndex-fIndex-1) End Function '用来得到一个时间字符串,该字符串用来设置路由器的时间和日期 Function ciscoDate() dim em, y,m,d,h Dim nowDate nowDate=Now() em=Array("January","February","March","April","May","June","July","August","September","October","November","December") y=Year(nowDate) m=em(Month(nowDate)-1) d=Day(nowDate) h=Time() ciscoDate=h & " " & m & " " & d & " " & y End Function Sub main On Error Resume Next crt.Screen.Synchronous = True crt.Screen.WaitForString "Console port" crt.Screen.Send VbCr '得到第一行显示文本,主要从中提取设备名称 Dim firstLine '用来存储标签的标题,也就是设备的名称 Dim tabTitle firstLine=crt.Screen.Get2(1,1,1,100) '得到第一行文本 tabTitle=mysubstring(firstLine,"""","""") '调用方法取两个双引号之间的文本 crt.Window.Caption= tabTitle 'Dim result 'result = crt.screen.WaitForStrings("'yes' or 'no'", "[yes/no]:", "RETURN") 'If result = 1 Then ' crt.Screen.Send VbCr 'ElseIf result = 2 Then ' crt.Screen.Send "no" & VbCr 'ElseIf result = 3 Then ' crt.Screen.Send VbCr 'Else ' crt.Screen.Send VbCr 'End If If crt.Screen.WaitForString("[yes/no]") Then crt.Screen.Send "no" & VbCr End If crt.Screen.Send VbCr &VbCr crt.Screen.WaitForString "Router>" crt.Screen.Send "enable" & VbCr crt.Screen.Send "conf terminal" & VbCr crt.Screen.Send "no ip domain-lookup " & VbCr crt.Screen.Send "hostname " & tabTitle & VbCr crt.Screen.Send "line con 0" & VbCr crt.Screen.Send "exec-timeout 0 0" & VbCr crt.Screen.Send "logging synchronous" & VbCr crt.Screen.Send "end" & VbCr crt.Screen.Send "clock set " & ciscoDate() & VbCr crt.Screen.Synchronous = False End Sub 这个脚本的意思,我在程序中都注释了,总体意思是给标签更名为设备的名称,并在设备起来后,设备几个常见的路由命令,如:不需要域名查找,永不超时,没有恼人的提示信息的不换行干扰(也就是自动换行吧,防止提示信息干扰),如果你不需要这些,用'注释到这些行,或者删除。 脚本弄好了,要想它正常工作,有两个办法,一个是纯命令行方法,就是在dynagen.ini文件中的: telnet = start secureCRT.exe /T /telnet %h %p改为telnet = start secureCRT.exe /T /SCRIPT DyRouter.vbs /telnet %h %p,当然,要确保系统能找到DyCRT.vbs,最好用绝对路径指明DyRouter.vbs 脚本所在位置。 第二种方法( 推荐此种方法),打开SecureCRT的界面,找到菜单Options->Global Options,弹出如下界面: 按序设置好就OK了,现在,开启你的Dynamips,点击net文件,输入telnet /all,就会看到如下界面: 其中绿色标签表示当然活动窗口,从中可以看到已经从脚本中输入了一些命令。 下面是用第二种方法的配置过程: |