现网超长命令回显处理

前言

        在网络设备中,一旦设备刚联机就会马上执行分页取消操作,华为设备命令如下。

screen-length 0 temporary

 但是,在现网环境中总有场景需要配合回显分页功能来实现回显完整抓取,比如某一账号开通时没有授权分屏指令、某一台防火墙设备配置几万行代码等,这种实际情况通常会影响到CLI命令回显抓取的完整性,设置有时候回显等待太久而造成读取超时等,从而联机失败

实验背景

        现有一台安装了Python的Windows运维终端,其IP地址和防火墙位于同一网段,现在假设这台交换机的配置很长,把他理解成一台行为管控的防火墙,那么,如何通过Python脚本与真机设备分页符进行互动,而非联机后直接取消分页,如何通过这种方式把现网设备中的超长回显逐步提取出来

        华为用来控制回显长度的命令

screen-length 10 temporary

 这样,现网的实际场景就变成了手工控制的实验场景,每次回显只显示10行

实验目的

        (1)Python脚本Paramiko登录一台交换机,设置回显分页,参数为10

        (2)回显信息如出现分页符More字符字样,则Paramiko继续发送空格指令,知道分页结束

        (3)处理回显信息,将分页符处理掉

实验思路

        首先,先完成Python脚本怎么在带分页的回显上发送空格指令,并把每个分页都抓取出来,且抓取完整,然后再考虑怎么把More字样做规范化处理

实验准备

        代码如下

import paramiko
import time

ip = "192.168.200.2"
username = "python"
password = "python"

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=ip, username=username, password=password,look_for_keys=False)
print("成功登录到{}".format(ip))
command = client.invoke_shell()
command.send('screen-length 10 temporary\n')
command.send('disp cur \n')
time.sleep(0.5)

output = "" #定义一个字符串变量来装分页回显,对回显进行拼接

#出现分页符More则发送空格指令,直到分页结束
while True:
    page = command.recv(65535).decode("ascii")
    output += page
    time.sleep(0.1)
    if page.endswith('>') or page.endswith(']'): #判断字符串是否以">"或者"]"结尾
        break
    if " ---- More ----" in page:
        command.send(" ")
output = re.sub(r" ---- More ----.*42D","",output) #用re调用正则表达式匹配出来乱码的字符,达到修饰最后会显得效果,如果不修饰会出现乱码,下面会给大家演示
print(output)
client.close()

 运行结果

这是不加修饰的回显

 这是加了修饰的回显

至此,实验结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值