大家以前可能大部分都是用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拉~~~