大家以前可能大部分都是用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,
gerneral->default session -> edit default settings
Options->session options -> connection -> logon scripts ->logon scrip 添加 F:\cisco\DyCRT.vbs
按序设置好就OK了,现在,开启你的Dynamips,点击net文件,输入telnet /all,
其中绿色标签表示当然活动窗口,从中可以看到已经从脚本中输入了一些命令。
俺用了下感觉不错。说下心得吧:如果我直接开模拟器的话(没有开启secureCRT)。。那么执行这个操作不成功。如果先执行secureCRT的话。再启动模拟器。然后start模拟器。然后操作 telnet /all 的话。可以成功!!
注意一定要先start 模拟器。。不然telnet鸟~~~~
俺又下载了个5.5的版本。也一样。看来必须要先启动secureCRT拉~~~
转载于:https://blog.51cto.com/1624515/590950