SecureCRT下Python脚本编写
时间:2022-07-28
本文章向大家介绍SecureCRT下Python脚本编写,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文主要内容转自:SecureCRT中python脚本编写学习指南
SecureCRT支持VB、JavaScript、Python等多种脚本语言。
一、使用python语言实现SecureCRT中的Dialog功能
# $language = "Python"
# $interface = "1.0"
#crt.Dialog.FileOpenDialog([title,[buttonLabel,[defaultFilename,[filter]]]])
#弹出一个对话框,用于选择单个文件;如果选择了具体文件则返回该文件的绝对路径,如果选择了弹窗的“取消”,则返回空。
filePath = crt.Dialog.FileOpenDialog("please open a file","open","a.log","(*.log)|*.log")
#filePath = crt.Dialog.FileOpenDialog("","","a.log","")
#crt.Dialog.MessageBox(message, [title, [icon|buttons]]) 警告、按钮类型弹出一个消息框,可以定义按钮,使用按钮和文本消息来实现和用户的简单对话;
crt.Dialog.MessageBox(filePath,"",64|0)
crt.Dialog.MessageBox("会话已断开","session",64|2)
crt.Dialog.MessageBox("确认是否退出","session",32|1)
crt.Dialog.MessageBox("确认是否退出","session",32|3)
crt.Dialog.MessageBox("是否继续安装","session",32|4)
crt.Dialog.MessageBox("此会话已打开","session",48|5)
crt.Dialog.MessageBox("无法连接此窗口","session",16|6)
#crt.Dialog.Prompt(message [, title [,default [,isPassword ]]])
#弹出一个输入框,用户可以填写文字,比如填写文件名,填写路径,填写IP地址等,运行结果如果点击'ok',返回输入的字符串,否则返回""
password = crt.Dialog.Prompt("password","session","admin",False)
crt.Dialog.MessageBox(password,"password",64|0)
password = crt.Dialog.Prompt("password","session","",True)
crt.Dialog.MessageBox(password,"password",64|0)
二、使用python语言实现SecureCRT中的Screen功能
# $language = "Python"
# $interface = "1.0"
# CurrentColumn返回当前光标的列坐标。
curCol = crt.Screen.CurrentColumn
crt.Dialog.MessageBox(str(curCol))
# CurrentRow返回当前光标的行坐标。
curRow = crt.Screen.CurrentRow
crt.Dialog.MessageBox(str(curRow))
# Columns 返回当前屏幕的最大列宽
cols = crt.Screen.Columns
crt.Dialog.MessageBox(str(cols))
# Rows 返回当前屏幕的最大行宽
rows = crt.Screen.Rows
crt.Dialog.MessageBox(str(rows))
#IgnoreEscape 定义当使用WaitForString、WaitForStrings和ReadString这三个方法时是否获取Escape字符(特殊字符如回车)默认是会获取的
crt.Screen.IgnoreEscape = False
crt.Dialog.MessageBox(crt.Screen.ReadString([" 3"],5)) #获取ctrl+c
crt.Screen.IgnoreEscape = True
crt.Dialog.MessageBox(crt.Screen.ReadString([" 3"],2)) #不获取ctrl+c
# MatchIndex 定义当使用WaitForStrings和ReadString这三个方法时会根据参数的位置 获取返回值,从1开始计算,如果没有一个匹配则返回0.
outPut = crt.Screen.ReadString(["error","warning","#"],10)
index = crt.Screen.MatchIndex
if (index == 0):
crt.Dialog.MessageBox("Timed out!")
elif (index == 1):
crt.Dialog.MessageBox("Found 'error'")
elif (index == 2):
crt.Dialog.MessageBox("Found 'warning'")
elif (index == 3):
crt.Dialog.MessageBox("Found '#'")
# Synchronous 设置屏幕的同步属性。若设置为false,则在脚本中使用WaitForString、WaitForStrings、ReadString函数时可能存在丢失一部分数据的现象,设置为true后可能会存在屏幕卡顿的情况,默认为false
crt.Screen.Synchronous = True
crt.Screen.Send("rn")
crt.Screen.ReadString("#")
crt.Screen.Send("rn")
crt.Screen.WaitForString("#")
crt.Screen.Send("rn")
crt.Screen.WaitForStrings(["#",">"])
crt.Screen.Send("conf trn")
# 方法
# Clear()清屏功能
# crt.Screen.Clear()
# get()按照坐标取出一个矩形框内的屏幕上的字符(即从某行某列开始到其它行其它列),不包含字符串中的回车换行符,所以这个多用于获取无格式的光标处字符串或某小段特定区域字符串。
out = crt.Screen.Get(row1, col1, row2, col2)
crt.Dialog.MessageBox(out)
# get2()解释按照坐标取出一个矩形框内的屏幕上的字符(即从某行某列开始到其它行其它列),包含字符串中的回车换行符,所以这个多用于获取大段带格式的字符串。
crt.Screen.Get2(row1, col1, row2, col2)
# IgnoreCase 使用全局参数设置控制在使用WaitForString、WaitForStrings和ReadString这三个函数时是否对大小写敏感,默认为false大小写字符串都会检查,设置为true时则不会检测大小写。
crt.Screen.IgnoreCase = True
crt.Screen.Send("show memoryrn")
crt.Screen.WaitForString("more")
crt.Screen.Send("rn")
crt.Screen.WaitForStrings("more","#")
crt.Screen.Send("rn")
crt.Screen.ReadString("more","#")
# Send() 向远端设备或者屏幕发送字符串,当向屏幕发送字符串时需要指定第二个参数为Ture
crt.Screen.Send("show versionrn")
crt.Screen.Send("rnhello,world!rn",True)
crt.Screen.IgnoreCase = True
while (crt.Screen.WaitForString("more",10)):
crt.Screen.Send("rn")
# SendKeys()向当前窗口发送按键,包含组合按键,比如可以发送类似"CTRL+ALT+C"等这样的组合键,这样写即可:crt.screen.sendkeys("^%c");这个功能需要语言本身支持,目前只有VBS和JS脚本可以使用。
# SendSpecial()可以发送特殊控制码,这个控制码是Crt内置的功能,具体可以包含的有Menu、Telnet、VT functions功能列表中提供的所有功能,
crt.Screen.SendSpecial("vT_HOLD_SCREEN")
# WaitForCursor()等待光标移动,当移动时返回值为true,当有超时时间参数且超时时返回false,否则会一直等待光标移动。利用这个功能可以用来判断一个命令的输出是否结束,
crt.Screen.WaitForCursor(5)
crt.Screen.Send("rnhello,world!rn",True)
if ( crt.Screen.WaitForCursor(5)):
crt.Screen.Send("show versionrn")
# WaitForKey()检测有键盘按键时返回true,当有超时时间参数且超时时返回false,否则会一直等待按键
if (crt.Screen.WaitForKey(5)):
crt.Screen.Send("show versionrn")
# WaitForString()一般用于发送命令后等待某字符串
# crt.Screen.WaitForString(string,[timeout],[bCaseInsensitive])
crt.Screen.WaitForString("#",10)
# WaitForStrings()与WaitForString是同样的功能,可以等待多个字符串
outPut = crt.Screen.WaitForStrings(["error","warning","#"],10)
index = crt.Screen.MatchIndex
if (index == 0):
crt.Dialog.MessageBox("Timed out!")
elif (index == 1):
crt.Dialog.MessageBox("Found 'error'")
elif (index == 2):
crt.Dialog.MessageBox("Found 'warning'")
elif (index == 3):
crt.Dialog.MessageBox("Found '#'")
# ReadString()与WaitForStrings功能类似,都是等待某几个字符出现,不同的是它还会读取字符串之前出现的所有字符。
crt.Screen.ReadString([string1,string2..],[timeout],[bCaseInsensitive])
1、string,必选参数,等待的字符串,最少有一个,可以是特殊字符比如:rn;
2、timeout,可选参数,超时时间,当检测不到对应字符串时会返回false,没有此参数时会一直等待;
3、bCaseInsensitive,可选参数,大小写不敏感,默认值是false,表示将检测字符串的大小写,当为true时不检测大小写。
三、实例
1. 实例一,循环运行命令
# $language = "python"
# $interface = "1.0"
# This automatically generated script may need to be
# edited in order to work correctly.
import time
start_time = time.time()
end_time = time.time()
def Main():
while True:
end_time = time.time()
crt.Screen.Synchronous = False
crt.Screen.Send("?")
crt.Screen.Send("rn")
crt.Screen.Send("rn")
time.sleep(1)
running_time = end_time - start_time
msg = "会话已断开n" +
"running ms : " + str(running_time) + "n" +
"start ms : " + str(start_time) + "n" +
"ent ms : " + str(end_time) + "n"
crt.Dialog.MessageBox(msg,"session",64|2)
Main()
参考文献
- SecureCRT中python脚本编写学习指南:https://www.cnblogs.com/zhaoyujiao/p/4908627.html
- 友情链接:http://www.cnblogs.com/OnOwnRoad/
- Python time sleep()方法:https://www.runoob.com/python/att-time-sleep.html
- Python(2)变量声明、变量类型:https://blog.csdn.net/qq20004604/article/details/78176329
- Python 日期和时间:https://www.runoob.com/python/python-date-time.html
- 可能是最全面的 python 字符串拼接总结:https://segmentfault.com/a/1190000015475309
- python中整数,浮点数和字符串的转换:https://blog.csdn.net/mx_windforce/article/details/9009455
- python毫秒级sleep:https://www.cnblogs.com/mmix2009/p/3223188.html
- Python 获取以毫秒为单位的时间戳:https://www.jianshu.com/p/9a8bfc04dbac
- python基础学习04(死循环):https://blog.csdn.net/yujin2010good/article/details/51278706
--------------------- Author: Frytea Title: SecureCRT下Python脚本编写 Link: https://blog.frytea.com/archives/469/ Copyright: This work by TL-Song is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
- contain_of宏定义
- 《Redis设计与实现》读书笔记(十三) ——Redis数据库其他内容与总结
- 《Redis设计与实现》读书笔记(十四) ——Redis RDB文件创建、载入与自动保存原理
- 框架 | Spark中的combineByKey
- 《Redis设计与实现》读书笔记(十五) ——Redis AOF持久化原理与实现
- PHP CodeBase: 生成N个不重复的随机数
- PHP转义Json里的特殊字符的函数
- PHP使用SOAP调用.net的WebService问题
- 框架 | spray-routing的核心流程
- 高通msm8909耳机调试
- 了解PHP中Stream(流)的概念与用法
- 动态绑定与静态绑定
- Android4.0 声卡配置-高通msm8916移植
- PHP安全:session劫持的防御
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ZeroLogon(CVE-2020-1472) 分析与狩猎
- 什么是数字资产?
- 我要偷偷的学Python,然后惊呆所有人(第一天)
- Python 中的上下文管理
- 我是如何阅读JDK源码的?
- Docker以root身份登录到容器
- SOAPUI访问WEBSERVICE案例
- 编译安装nginx
- 磁盘高可用解决方案(DBA).md
- Python 3.7 + HttpRunner 初探
- 数据库PostrageSQL-服务器配置(复制)
- 高可用服务解决方案(DBA).md
- dotnet 使用 Interlocked 实现一个无锁的快速无序仅写集合
- 利用Python将gff3转换成gtf格式
- 单细胞DoHeatmap画热图标签出界