SecureCRT 使用python脚本

本文介绍如何使用SecureCRT结合Python进行自动化操作,包括通过对话框交互、读取日志文件、执行远程命令并获取输出等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.codeweblog.com/securecrt-python/

学完python后需要学以致用,但平时还真没有这个环境,也不搞自动化,但语言这玩意必需要用,就拿secureCRT来练手吧,也算是和工作擦点边

对话框加按扭
CONFIRM_REPLACE = """\                                                                    #为数不多的button判断
Do you want to replace the contents of "%(FILE)s" with the selected text? 

    Yes = overwrite
    No = append
    Cancel = end script"""
message = CONFIRM_REPLACE % { 'FILE' : filename }
        prompt = "Replace contents"
        buttons = BUTTON_YESNOCANCEL

        result = crt.Dialog.MessageBox(message, prompt, buttons)
if result == IDYES:
    fileMode = "w"
elif result == IDNO:
    fileMode = "a"
 

对话框取值

 crt.Dialog.Prompt(                                                                        #超级有用的在用户这获取数据的方式
        "Save selected text to file:",
        "SecureCRT - Save Selected Text To File",
        "MyFile.txt")
 

获取log文件名在SecureCRT

tab = crt.GetScriptTab()
tab.Session.LogFileName                                                                     #如果在CRT中设置了log文件名,这个函数可以把它读取出来
可以直接取到log的文件名

获取系统当前的前缀名

SCRIPT_TAB = crt.GetScriptTab()
rowIndex = SCRIPT_TAB.Screen.CurrentRow
colIndex = SCRIPT_TAB.Screen.CurrentColumn - 1
prompt = SCRIPT_TAB.Screen.Get(rowIndex, 0, rowIndex, colIndex)                              #获取当前行,当前列的数据,即该服务器的前缀,与waitfor配套
prompt = prompt.strip()

获取打印值

def CaptureOutputOfCommand(command, prompt):
    if not crt.Session.Connected:
        return "[ERROR: Not Connected.]"

    # First, send the command to the remote.
    SCRIPT_TAB.Screen.Send(command + '\r')                                                 #输入命令 cmmand 然后回车

    # Second, wait for the carriage return to be echoed by the remote device.
    # This allows us to capture only the output of the command, not the line
    # on which the command was issued (which would include the prompt + cmd).
    # If you want to capture the command that was issued, simply comment out
    # the following line of code.
    SCRIPT_TAB.Screen.WaitForString('\r')                                                  #等待命令输完后,服务器给的回应,这样可以不是获取行,而是获取输出

    # Now that the command has been sent, use Screen.ReadString to capture
    # all the data that is received up to the point at which the shell
    # prompt appears (the captured data does not include the shell prompt).
    return SCRIPT_TAB.Screen.ReadString(prompt)                                            #获取直到prompt出现时的所有数据

屏幕取词

filename = os.path.join(os.path.expanduser('~'), 'output.txt')                                 #~/output.txt
fp = open(filename, "wb+")
screenrow = crt.Screen.CurrentRow - 1
readline = crt.Screen.Get(screenrow, 1, screenrow, 20)                                         #把当前行的1~20个字符取出来
fp.write(readline + os.linesep)                                                                #把取出的那一行加行尾符写到文件中

写到excel

import os
import csv                                                                                     #excel module
fileobj = open(filename, 'wb')
worksheet = csv.writer(fileobj)
worksheet.writerow(items[:2])
fileobj.close(

连接

SSH:
cmd = "/SSH2 /L %s /PASSWORD %s /C 3DES /M MD5 %s" % (user, passwd, host)
crt.Session.Connect(cmd)                                                                        #ssh -L user password host
Telnet:
crt.Session.Connect("/TELNET 127.0.0.1 2034")                                                   # telnet 127.0.0.1:2034
crt.Session.Connect("/S \"" + session + "\"")                                                   #如果这个session在CRT里存在,无论是Telnet还是SSH都能连

调试工具 CRT中的print

crt.Dialog.MessageBox("Nothing to save!")
 

参考:

http://www.vandyke.com/support/securecrt/python_examples.html
<think>我们被要求使用SecureCRTPython脚本通过telnet登录设备。根据引用,我们可以总结出几种方法: 方法1:使用命令行参数(如引用[1]) 在脚本中可以直接调用SecureCRT并传递telnet连接参数,格式为: `SecureCRT.exe /SCRIPT 脚本路径 /T /telnet 主机名 端口` 方法2:使用自动登录脚本(如引用[2]) 编写Python脚本,利用SecureCRT的API,自动输入用户名和密码。通常需要三个文件:主脚本、环境封装和存储凭据的文件。 方法3:使用bat文件调用(如引用[3]) 通过Python生成一个bat文件,然后运行这个bat文件来启动SecureCRT并执行脚本。 根据用户需求,我们选择方法2作为主要方法,因为它更符合“脚本登录”的意图,且可维护性高。 步骤: 1. 创建三个文件(放在同一目录): - `autoConnect.py`:主脚本,包含登录逻辑。 - `connectEnv.py`:封装SecureCRT的API,方便调用。 - `UserNameAndPassword.txt`:存储用户名和密码(第一行用户名,第二行密码)。 2. 编写`connectEnv.py`:封装一些常用的SecureCRT操作。 3. 编写`autoConnect.py`:读取用户名密码,建立telnet连接,并发送登录信息。 注意:SecureCRTPython脚本是在SecureCRT自己的Python环境中运行的,所以不能直接使用标准Python的subprocess等模块,而是使用SecureCRT提供的对象(如`crt`对象)。 因此,我们调整思路,直接使用SecureCRT脚本API。 具体代码: **connectEnv.py**(可选,但为了结构清晰,我们创建一个环境封装类): ```python # connectEnv.py class ConnectEnv: @staticmethod def send_command(command, wait_string="?"): crt.Screen.Send(command + "\r") crt.Screen.WaitForString(wait_string) ``` **autoConnect.py**: ```python # autoConnect.py import os import sys # 将当前目录添加到模块搜索路径,以便导入connectEnv sys.path.append(os.path.dirname(__file__)) from connectEnv import ConnectEnv def main(): # 读取用户名和密码文件 with open("UserNameAndPassword.txt", "r") as f: lines = f.readlines() username = lines[0].strip() password = lines[1].strip() # 获取当前会话对象 tab = crt.GetScriptTab() # 建立telnet连接(假设主机和端口已经在会话中配置好,或者通过命令行传入) # 如果会话未连接,则连接 if not tab.Session.Connected: tab.Session.Connect() # 等待登录提示,根据实际情况调整等待字符串 # 例如,提示为"Username:" 和 "Password:" crt.Screen.WaitForString("Username:") crt.Screen.Send(username + "\r") crt.Screen.WaitForString("Password:") crt.Screen.Send(password + "\r") # 登录后,可以发送一些命令,例如等待出现命令提示符(如#或>) # 这里等待出现'#',超时时间5秒 crt.Screen.WaitForString("#", 5) # 使用ConnectEnv类发送命令示例 # env = ConnectEnv() # env.send_command("ls", "#") # 假设等待#出现 if __name__ == "__main__": main() ``` **UserNameAndPassword.txt**: ``` admin password123 ``` 使用方法: 1. 在SecureCRT中,打开一个已经配置好telnet会话的窗口(或者通过命令行传入主机和端口,但上述代码中我们假设会话已经配置好,所以需要先创建一个会话配置,其中协议为telnet,主机和端口设置正确)。 2. 在SecureCRT的菜单栏选择“脚本”->“运行”,然后选择`autoConnect.py`。 注意:如果主机和端口没有预先配置,我们可以通过命令行参数传递。但根据引用[1],我们可以通过命令行启动SecureCRT并指定telnet主机和端口。因此,我们可以修改脚本以接受命令行参数。 修改`autoConnect.py`以支持命令行参数: ```python # autoConnect.py (支持命令行参数) import os import sys import argparse sys.path.append(os.path.dirname(__file__)) from connectEnv import ConnectEnv def main(): # 解析命令行参数 parser = argparse.ArgumentParser() parser.add_argument('host', nargs='?', default=None) parser.add_argument('port', nargs='?', default=23, type=int) args = parser.parse_args(crt.Arguments) # 读取用户名和密码文件 with open("UserNameAndPassword.txt", "r") as f: lines = f.readlines() username = lines[0].strip() password = lines[1].strip() tab = crt.GetScriptTab() # 如果命令行提供了主机参数,则使用该主机和端口 if args.host: # 修改当前会话的Hostname和Port,然后连接 tab.Session.Config.SetOption("Hostname", args.host) tab.Session.Config.SetOption("Port", args.port) # 设置协议为telnet tab.Session.Config.SetOption("Protocol", "Telnet") if not tab.Session.Connected: tab.Session.Connect() # 等待登录提示 crt.Screen.WaitForString("login:") crt.Screen.Send(username + "\r") crt.Screen.WaitForString("Password:") crt.Screen.Send(password + "\r") crt.Screen.WaitForString("#", 5) if __name__ == "__main__": main() ``` 这样,我们就可以通过命令行调用: ``` SecureCRT.exe /SCRIPT path\to\autoConnect.py /T /telnet 192.168.1.1 23 ``` 或者,在已经打开的SecureCRT中运行脚本(此时如果命令行参数未提供,则使用当前会话的配置)。 注意:在SecureCRT脚本环境中,`crt.Arguments`可以获取到运行脚本时传递的参数(不包括脚本名)。 总结:我们提供了两种方式,一种是预先配置会话,另一种是命令行传递主机和端口。用户可以根据需要选择。 §§相关问题§§ 1. 如何配置SecureCRT的会话以便在脚本使用? 2. 除了telnet,SecureCRT脚本是否支持SSH协议登录? 3. 如何确保在脚本中安全地存储用户名和密码?</think>### SecureCRT Python脚本实现Telnet登录 我将提供一个完整的SecureCRT Python脚本解决方案,通过Telnet协议自动登录网络设备。以下是实现步骤和代码: #### 核心脚本文件:`telnet_login.py` ```python # -*- coding: utf-8 -*- import os import sys def main(): # 获取当前脚本目录 script_path = os.path.dirname(crt.ScriptFullName) # 读取设备信息(IP、端口) device_ip = crt.Dialog.Prompt("请输入设备IP:", "Telnet登录", "", False) port = crt.Dialog.Prompt("请输入端口号(默认23):", "Telnet登录", "23", False) # 读取认证信息 with open(os.path.join(script_path, "auth.txt"), "r") as f: credentials = f.readlines() username = credentials[0].strip() password = credentials[1].strip() try: # 建立Telnet连接 crt.Session.Connect("/TELNET " + device_ip + " " + port) # 等待登录提示并输入凭据 crt.Screen.WaitForString("Username:") crt.Screen.Send(username + "\r") crt.Screen.WaitForString("Password:") crt.Screen.Send(password + "\r") # 等待登录成功提示 crt.Screen.WaitForString("#", 5) crt.Dialog.MessageBox("登录成功!当前设备IP: " + device_ip) except Exception as e: crt.Dialog.MessageBox("登录失败: " + str(e)) if __name__ == "__main__": main() ``` #### 认证文件:`auth.txt` ``` admin # 第一行为用户名 Cisco123! # 第二行为密码 ``` ### 使用说明 1. **文件准备**: - 创建上述两个文件并放在同一目录 - 在`auth.txt`中配置设备登录凭据 2. **执行方式**: - 在SecureCRT中:`脚本 > 运行脚本 > 选择telnet_login.py` - 命令行启动(参考引用[1]): ``` SecureCRT.exe /SCRIPT "C:\path\to\telnet_login.py" ``` 3. **操作流程**: - 脚本运行后会弹出对话框要求输入设备IP和端口 - 自动读取`auth.txt`中的用户名和密码 - 建立Telnet连接并自动完成认证 - 登录成功后显示提示信息 ### 关键功能说明 1. **交互式输入**: ```python device_ip = crt.Dialog.Prompt("请输入设备IP:", "Telnet登录", "", False) ``` 使用SecureCRT的API弹出输入对话框[^2] 2. **凭据安全存储**: ```python with open("auth.txt", "r") as f: credentials = f.readlines() ``` 将敏感信息与脚本分离存储[^2] 3. **连接控制**: ```python crt.Session.Connect("/TELNET " + device_ip + " " + port) ``` 使用SecureCRT内置方法建立Telnet连接[^1] 4. **自动化登录流程**: ```python crt.Screen.WaitForString("Username:") crt.Screen.Send(username + "\r") ``` 实现等待提示符并自动输入凭据[^3] ### 安全建议 1. 将`auth.txt`文件设置为隐藏属性 2. 使用文件加密(如pycryptodome库) 3. 设置脚本目录访问权限 4. 定期更新密码 > 提示:对于企业级应用,建议集成LDAP或Radius认证替代本地密码文件[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值