SecureCRT脚本实现自动化交换机巡检
  

北回归线 5759

本帖最后由 北回归线 于 2017-7-4 17:34 编辑

作者来自社区编辑部

一、说点啥  
     SecureCRT对于每一位网工来说并不陌生,相信每个网工的电脑上肯定都装着这款软件。以前刚开始玩的时候觉得就是普通的仿真终端程序而已,其实它软件还有更加强大的脚本功能,SecureCRT可以支持VBScript、javascript、python脚本语言等等。通过脚本我可以来拓展更多丰富的功能,比如可以通过脚本实现自动化的命令执行。
     刚巧社区里面的小伙伴最近在做一个大项目,有上百台交换机配置需要收集。刚好最近有研究,于是就搞起来了。 今天我们来说说如何使用SecureCRT制作一个自动化批量巡检交换机的脚本,这里我们用VBScript脚本语言来制作,官方对这个支持的也挺好的,还有帮助文档,而且网上关于用VBScript编写CRT脚本的教程也很多,遇到问题还可以百度下。通过脚本自动化的执行提升工作效率,在也不用自己来搬砖了。

二、制作脚本;
这里我们以cisco交换机为例子,讲解下没段代码的含义,然后您可以根据附件提供的代码根据下面的教程自己进行修改脚本,适应自己的环境。脚本适用于可以通过CRT登陆设备,比如华三、华为交换机或在linux操作系统。
1、首先我们需要让脚本来自动帮我们登录交换机并进入到enable模式,请看下面的脚本:

  1.     crt.Screen.WaitForString ("Username:")  ‘等待字符串Username出现,区分大小写
  2.     crt.screen.Send("cisco")&chr(13) ‘发送字符串cisco并回车
  3.     crt.Screen.WaitForString "Password: "
  4.     crt.Screen.Send "cisco" & chr(13)
  5.     crt.Screen.WaitForString ">"
  6.     crt.Screen.Send "en" & chr(13)
  7.     crt.Screen.WaitForString "Password: "
  8.     crt.Screen.Send "cisco" & chr(13)
复制代码
注:设备的账号密码可以在上面的脚本中修改发送的字符串即可

2、通常我们都会在crt界面点击记录会话日志,这里我们就不需要手动,用脚本就解决了。
  1. crt.session.LogFileName="192.168.1.1.log"  ‘设置记录的日志文件名称
  2. crt.session.Log(true)       ‘开始记录日志
复制代码
3、通常需要我们来手敲的命令,用下面的脚本就可以让crt自己敲起来了。
  1. crt.Screen.Send "show clock" & chr(13)
  2. crt.Screen.WaitForString "#"
  3. crt.Screen.Send "show running-config" & chr(13)
  4. nextmore ‘调用自定义函数
  5. crt.Screen.Send "show version" & chr(13)
  6. nextmore ‘调用自定义函数
复制代码
那么如果想加入其它命令怎么办呢?直接在这块脚本上附加上下面的代码即可。
  1. crt.Screen.Send "show vlan" & chr(13)
  2. crt.Screen.WaitForString "#"
复制代码
如果输出内容较多会出现more,只要稍作修改,调用我们自定义的函数即可。
  1. crt.Screen.Send "show vlan" & chr(13)
  2. nextmore
复制代码

4、我们知道当crt界面不能输出所有信息的时候,就会出现“—more—”的字符串,这个时候需要手动执行空格或者回车查看更多的内容,但是因为设备的不通需要执行的空格数量又不确定,于是我们这里就编写一个循环语句,当遇到More字符串出现的时候就自动发送空格。由于很多命令都会出现类似的情况,于是我们可以将整循环编写为一个函数,用于调用即可。以简化我们的代码。
编写函数:
  1. Function nextmore
  2. do while ( crt.screen.waitforstring("--More--",3)=true)
  3. crt.screen.Send(chr(32))
  4. loop
  5. End Function
复制代码

脚本含义:当3秒内等等到字符串"--More--"的出现则执行下面的语句发送一个chr(32)(空格键的ASCII值),while判断条件成立执行,不成立则退出循环。
5、关闭日志记录,当然这个操作我们也可以自动化。
  1. crt.screen.waitforstring("#")
  2. crt.session.Log(false)
复制代码

注:当等待到“#”出现,也就是命令都执行完毕后,停止日志记录。

6、登录下一台交换机执行上面操作,一台设备的所有操作都做完,下面我们要让这些脚本自动一台一台的去执行。这里我们就需要再次用到循环语句。
  1. for i=1 to 254  ‘循环从1到254依次循环,i的值会自动递增
  2. dim ip  ‘创建变量ip
  3. ip="192.168.1."&i  ‘定义变量,作为IP地址,ip随着循环变化而变
  4. crt.screen.Send("telnet "&ip)&chr(13)  ‘telnet登录交换机
  5. '判断是否telnet成功,如果31秒内出现Username登录则执行下面语句
  6. if(crt.Screen.WaitForString ("Username:",31)=true) then
  7. '下面语句为条件成立后执行的语句内容
  8. crt.session.LogFileName=ip&".log" ‘以IP地址作为日志的文件名
  9. crt.session.Log(true)   
  10. 。。。。         
  11. end if  ‘if语句结束
  12. next  ‘和for循环对应,执行下一次循环
复制代码


完整脚本下载:
结合脚本中的注释自行修改脚本满足自己环境需求。
cisco-v1.3.zip (882 Bytes, 下载次数: 34, 售价: 30 S豆)

喜欢这篇文章吗?喜欢就给楼主打赏吧!

打赏
4人已打赏

Travelnight 发表于 2017-7-2 13:07
  
666666666666666666666666666666666666
feeling 发表于 2017-7-2 13:25
  
好厉害啊,学习了
头像被屏蔽
honor 发表于 2017-7-2 15:02
  
提示: 作者被禁止或删除 内容自动屏蔽
毕业小雷音 发表于 2017-7-2 15:25
  
66666666666666666666666666666
Sangfor_闪电回_朱丽 发表于 2017-7-3 09:09
  
社区学习的氛围越来越好了,感谢小伙伴们的分享!
螺丝钉 发表于 2017-7-3 09:13
  
不敢直视啊
小huihui 发表于 2017-7-3 10:18
  
楼主就是厉害
nrsheng 发表于 2017-7-4 08:32
  
学习一下!
蓝色枫之伤 发表于 2017-8-3 08:52
  
这是吧日志收集起来,不需要一台台登录了?设备有没有在线还得自己分析啊
×
有话想说?点这里!
可评论、可发帖
发表新帖

本版版主

12
158
6

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人