本帖最后由 北回归线 于 2017-7-4 17:34 编辑
作者来自社区编辑部
一、说点啥 SecureCRT对于每一位网工来说并不陌生,相信每个网工的电脑上肯定都装着这款软件。以前刚开始玩的时候觉得就是普通的仿真终端程序而已,其实它软件还有更加强大的脚本功能,SecureCRT可以支持VBScript、javascript、python脚本语言等等。通过脚本我可以来拓展更多丰富的功能,比如可以通过脚本实现自动化的命令执行。 刚巧社区里面的小伙伴最近在做一个大项目,有上百台交换机配置需要收集。刚好最近有研究,于是就搞起来了。 今天我们来说说如何使用SecureCRT制作一个自动化批量巡检交换机的脚本,这里我们用VBScript脚本语言来制作,官方对这个支持的也挺好的,还有帮助文档,而且网上关于用VBScript编写CRT脚本的教程也很多,遇到问题还可以百度下。通过脚本自动化的执行提升工作效率,在也不用自己来搬砖了。
二、制作脚本; 这里我们以cisco交换机为例子,讲解下没段代码的含义,然后您可以根据附件提供的代码根据下面的教程自己进行修改脚本,适应自己的环境。脚本适用于可以通过CRT登陆设备,比如华三、华为交换机或在linux操作系统。 1、首先我们需要让脚本来自动帮我们登录交换机并进入到enable模式,请看下面的脚本:
- crt.Screen.WaitForString ("Username:") ‘等待字符串Username出现,区分大小写
- crt.screen.Send("cisco")&chr(13) ‘发送字符串cisco并回车
- crt.Screen.WaitForString "Password: "
- crt.Screen.Send "cisco" & chr(13)
- crt.Screen.WaitForString ">"
- crt.Screen.Send "en" & chr(13)
- crt.Screen.WaitForString "Password: "
- crt.Screen.Send "cisco" & chr(13)
复制代码注:设备的账号密码可以在上面的脚本中修改发送的字符串即可
2、通常我们都会在crt界面点击记录会话日志,这里我们就不需要手动,用脚本就解决了。 - crt.session.LogFileName="192.168.1.1.log" ‘设置记录的日志文件名称
- crt.session.Log(true) ‘开始记录日志
复制代码3、通常需要我们来手敲的命令,用下面的脚本就可以让crt自己敲起来了。 - crt.Screen.Send "show clock" & chr(13)
- crt.Screen.WaitForString "#"
- crt.Screen.Send "show running-config" & chr(13)
- nextmore ‘调用自定义函数
- crt.Screen.Send "show version" & chr(13)
- nextmore ‘调用自定义函数
复制代码 那么如果想加入其它命令怎么办呢?直接在这块脚本上附加上下面的代码即可。- crt.Screen.Send "show vlan" & chr(13)
- crt.Screen.WaitForString "#"
复制代码如果输出内容较多会出现more,只要稍作修改,调用我们自定义的函数即可。 - crt.Screen.Send "show vlan" & chr(13)
- nextmore
复制代码
4、我们知道当crt界面不能输出所有信息的时候,就会出现“—more—”的字符串,这个时候需要手动执行空格或者回车查看更多的内容,但是因为设备的不通需要执行的空格数量又不确定,于是我们这里就编写一个循环语句,当遇到More字符串出现的时候就自动发送空格。由于很多命令都会出现类似的情况,于是我们可以将整循环编写为一个函数,用于调用即可。以简化我们的代码。 编写函数: - Function nextmore
- do while ( crt.screen.waitforstring("--More--",3)=true)
- crt.screen.Send(chr(32))
- loop
- End Function
复制代码
脚本含义:当3秒内等等到字符串"--More--"的出现则执行下面的语句发送一个chr(32)(空格键的ASCII值),while判断条件成立执行,不成立则退出循环。 5、关闭日志记录,当然这个操作我们也可以自动化。 - crt.screen.waitforstring("#")
- crt.session.Log(false)
复制代码
注:当等待到“#”出现,也就是命令都执行完毕后,停止日志记录。
6、登录下一台交换机执行上面操作,一台设备的所有操作都做完,下面我们要让这些脚本自动一台一台的去执行。这里我们就需要再次用到循环语句。 - for i=1 to 254 ‘循环从1到254依次循环,i的值会自动递增
- dim ip ‘创建变量ip
- ip="192.168.1."&i ‘定义变量,作为IP地址,ip随着循环变化而变
- crt.screen.Send("telnet "&ip)&chr(13) ‘telnet登录交换机
- '判断是否telnet成功,如果31秒内出现Username登录则执行下面语句
- if(crt.Screen.WaitForString ("Username:",31)=true) then
- '下面语句为条件成立后执行的语句内容
- crt.session.LogFileName=ip&".log" ‘以IP地址作为日志的文件名
- crt.session.Log(true)
- 。。。。
- end if ‘if语句结束
- next ‘和for循环对应,执行下一次循环
复制代码
完整脚本下载:结合脚本中的注释自行修改脚本满足自己环境需求。
三、脚本知识
crt.Screen.Send 发送一个字符串 crt.Screen.WaitForString 等待字符串出现,如果匹配到字符串后执行下面的操作 chr(13) 这是回车键的ASCII码值 chr(32) 这是空格键的ASCII码值 & VBScript里面的连接字符串连接符 ' 注释行符号,在文本前打上英文的单引号后,表示此行语句不被执行 Do...Loop 语句 运行循环,当条件为 true 或者直到条件为 true 时。 Do while(判断条件) 执行语句 Loop For...Next 语句 运行一段语句指定的次数 For i=1 to 254 执行语句 Next IF语句 假如你希望在条件为 true 时执行一系列的代码,可以使用这个语句。 If (判断条件) then 执行语句 End if
如果还有不明白的地方可以跟帖回复,或者百度下去学习下VBScript脚本语言,脚本语言比较简单,短时间可以学会基础,有基础了搞个crt脚本是没问题的。
|