脚本功能说明:
此脚本目的是在设备上查看所有显式命令能否正常执行。采用命令提示符的方式获取回显信息,随后解析回显信息后与上一级提示信息组合成新的命令,循环迭代直到完成命令收集。收集到所有信息后再依次下发,同时将收集的信息记录到文本中。
脚本使用说明:
1.脚本有两种方式全局show:
通过show ?命令全局识别,命令组合的最大检查层级是10级;
从mpu_cmd、lpu_cmd、sfu_cmd的txt文件中直接读取命令,此文件要么继承要么用前一个方法生成;
脚本执行前通过弹窗选取命令获取方式,read表示直接读取,show表示通过命令获取;
2.脚本涵盖mpu、lpu、sfu三种模式的命令遍历,也可通过调整explore_commands("lpu","show")修改查看命令;
3.在SecureCRT上连接设备后再运行脚本;
文件说明:
1.x_ready_cmd--mpu|lpu|sfu上通过命令提示符?获取的无报错命令;
2.x_dis_cmd--mpu|lpu|sfu上通过命令提示符?获取的报无效或unknown的命令,只记录不执行;
3.x_cmd--用于存储mpu|lpu|sfu上可执行的命令集,需要在1收集完后手动备份生成;
4.x_result--用于存储mpu|lpu|sfu上执行命令的回显信息。
源码:
# $language = "Python"
# $interface = "1.0"
import re
import random
import os
import SecureCRT
def parse_echo_and_build_dict(echo):
"""解析命令回显并构建字典"""
crt.Screen.Send("\n")
cmd_dict = {}
lines = echo.split('\n')
for line in lines:
parts = line.split()
if "#" in line:
continue
if len(parts)==0:
continue
if parts != "":
key=parts[0]
value=""
for one in range(len(parts)):
if one>0:
value=value+" "+parts[one]
cmd_dict[key] = value
return cmd_dict
def resolve_value(key, value):
"""根据键值对应用取值规则"""
if re.search(r'<\d+-\d+>',key):
result = extract_numbers(key)
elif re.search(r'<\d+-\d+,\d+>',key):
result = extract_numbers(key)
elif re.search(r'<\d+,\d+>',key):
result = extract_numbers(key)
elif "WORD" in key and "address" in value.lower():
result = "127.0.0.1"
elif "WORD" in key and "characters" in value.lower():
result = "asfwrc"
elif "LINE" in key and "characters" in value.lower():
result = "asfwrc"
elif "WORD" in key and "name" in value.lower():
result = "guest"
elif "WORD" in key and "password" in value.lower():
result = "guest"
elif "STRING" in key:
result = "lhkfghja"
elif "X:X:X:X::X" in key:
result = "128::1"
elif "A.B.C.D" in key and "address" in value.lower():
result = "127.0.0.1"
elif "NUMBER" in key and "number" in value.lower():
numbers = []
numbers.extend(range(1, 16))
result = numbers
elif "NUMBER" in key:
result = "3"
elif "configure" in key or "connect" in key or "filesystem" in key or "exit" in key:
result = "skip"
elif re.search(r'<\d+>',key):
result = extract_numbers(key)
else:
result = key
return result
def extract_numbers(input_str):
# 使用正则表达式提取尖括号内的内容
match = re.search(r'<(.*?)>', input_str)
if match:
content = match.group(1)
# 分割内容,处理数字和可能的区间
parts = content.split(',')
numbers = []
for part in parts:
# 检查是否为区间
if '-' in part:
start, end = map(int, part.split('-'))
if end >10:
if end &g