python写自动化运行脚本_用python编写控制网络设备的自动化脚本3:启动

启动介绍(前言)

常见问题:想要登到设备上结果忘记了用户名密码怎么办?

这对于经常接触大量网络设备的网络工程师而言是一个很常见的问题。一个企业网为了安全起见需要定期更换密码,加上人员变动,旧密码可能不知不觉遗失。尤其是那些放在仓库里的旧设备,一放就放很久,还存着旧配置,需要拿出来使用时已经不知道里面保存了什么密码,无法登陆,只能清除。

这篇文章写了如何借助之前设计好的框架,编写一个自动清除配置脚本。

因为这是在不知道登陆密码无法登陆的情况下清除配置,只能物理连接到设备。为了写这篇文章,我拿了台真机来做实验。

型号:华三S3100V3-28TP-EI,全新的两千块钱左右。

在交换机开机阶段清除配置的过程

在写代码之前,先演示一下如何清除配置。交换机进入启动菜单就像电脑进入BIOS一样,有特定步骤。方法是网上找来的,基本上不同型号的交换机都能在网上找到如何进入启动菜单的相关资料。

首先拿控制线一头连交换机,一头连电脑。交换机通电,在开机过程中狂按ctrl+b进入启动菜单.

Starting......

Press Ctrl+D to access BASIC BOOT MENU

Booting Normal Extend BootWare....

********************************************************************************

* *

* H3C S3100V3-28TP-EI Switch BOOTROM, Version 121 *

* *

********************************************************************************

Copyright (c) 2004-2018 New H3C Technologies Co., Ltd.

Creation Date : May 4 2018, 16:17:55

CPU Clock Speed : 800MHz

Memory Size : 512MB

Flash Size : 256MB

CPLD Version : 001

PCB Version : Ver.B

Mac Address : 90e7108ab5dd

Press Ctrl+B to access EXTENDED BOOT MENU...0

Password recovery capability is enabled.

出现ctrl+b的字样时,马上按下ctrl+b,等待启动菜单出现。老版本可能会提示输入启动密码,华三默认是空的,直接敲回车。等待一会出现启动菜单。

EXTENDED BOOT MENU

1. Download image to flash

2. Select image to boot

3. Display all files in flash

4.

5. Restore to factory default configuration

6. Enter BootRom upgrade menu

7. Skip current system configuration

8. Set switch startup mode

9. Set The Operating Device

0. Reboot

Ctrl+Z: Access EXTENDED ASSISTANT MENU

Ctrl+F: Format file system

Ctrl+P: Change authentication for console login

Ctrl+R: Download image to SDRAM and run

Ctrl+C: Display Copyright

Enter your choice(0-9):

(不知道第4个选项碰到知乎的什么敏感词了,粘贴到编辑框里就无法保存草稿无法发布,只能删掉。文章封面图是完整的启动菜单截图。)

选择7,下次启动时将跳过配置文件(不加载配置),按y继续。

Enter your choice(0-9): 7

The current setting will run with current configuration file when reboot.

Are you sure you want to skip current configuration file when reboot? Yes or No

(Y/N):Y

Setting...Done.

上面的操作完成后会重新出现启动菜单,选择0,重启。

重启完成之后,进入用户视图,可以看到设备名称是默认的“H3C”,敲“save”就可以用默认配置把原来配置覆盖掉了。

启动模式接口

分析需求,在启动阶段经常做的事情有:进入启动菜单、升级系统、清除配置、重启。编写启动模式接口。

class I启动模式(I模式):

def __init__(self, a):

I模式.__init__(self, a)

def f登录(self, a密码 = "", a超时 = 60):

"尝试进入设备启动模式,有密码输密码,超时抛异常"

raise NotImplementedError()

def f更新系统(self, a文件):

raise NotImplementedError()

def f清除配置(self):

raise NotImplementedError()

def f重新启动(self):

raise NotImplementedError()

写完启动模式接口还要写如何创建启动模式对象。因为启动模式是跟用户模式一样的顶级模式,直接从设备创建,所以把创建启动模式对象的函数放到设备接口里。

class I设备:

def f模式_启动(self):

raise NotImplementedError()

华三启动模式实现

在交换机开机阶段清除配置的过程一节展示了如何清配置,具体实现只要模仿这个过程就行。

交换机刚开机要进入启动菜单需要狂按ctrl+b,从各种途径查找资料可得,按ctrl+b会向设备发送'\x02'这个特殊字符,所以代码里只要不断发送'\x02'再检测是否进入启动菜单就行。

c启动字符 = '\x02'

#↓华三启动模式的登陆

def f登录(self, a密码 = "", a超时 = 60):

v秒表 = 时间.C秒表()

while True:

self.m设备.f输入(c启动字符)

time.sleep(1)

v输出 = self.m设备.f输出(a等待 = False)

#继续判断

if "assword" in v输出:

time.sleep(1)

break

#超时判断

if v秒表.f滴答() >= a超时:

raise TimeoutError()

self.m设备.f输入(a密码)

self.m设备.f输入_回车()

self.f等待提示符()

再写一个函数用来检查是否可以输入选项。操作是需要时间的,如果输入太快会出现莫名其妙的问题,所以加个等待。

def f等待提示符(self, a超时 = 60):

v秒表 = 时间.C秒表()

while True:

v输出 = self.m设备.f输出(a等待 = False)

if "BOOT MENU" in v输出:

break

if v秒表.f滴答() >= a超时:

raise TimeoutError()

f清除配置 很简单,按7再按y。

def f清除配置(self):

self.m设备.f输入("7")

self.m设备.f输入_回车()

self.m设备.f输入("y")

self.m设备.f输入_回车()

self.f等待提示符()

f重新启动 也很简单,按0。

def f重新启动(self):

self.m设备.f输入("0")

self.m设备.f输入_回车()

应用示例:一键清除配置

import time

import cflw网络连接_串口 as 串口

import cflw网络设备_华三 as 华三

def main():

v连接 = 串口.C串口("COM1")

v设备 = 华三.f创建设备(v连接, 华三.E型号.s3100, 7.1)

v设备.fs回显(True)

v启动模式 = v设备.f模式_启动()

v启动模式.f登录()

v启动模式.f清除配置()

v启动模式.f重新启动()

while True:

v设备.f输出()

time.sleep(1)

if __name__ == "__main__":

main()

这个示例就是把上面写的步骤写成一个完整的脚本。运行脚本时,脚本会检测交换机状态,不断尝试进入启动菜单。一旦成功进入启动菜单,它会清除配置然后重新启动。如果中间出现任何问题,则抛出异常。后面的死循环用来不断打印输出信息,以查看交换机是否重启完毕。交换机重启完毕之后就可以停止脚本做其他事情。

结尾

这篇文章内容有点少,因为启动阶段能做的事情就是这么少。

启动模式接口的4个函数只实现了3个,还有一个更新系统没写,因为我从来没有给网络设备升级过系统,直接不写了。

文章的相关代码已发布到Github,见:cflw/cflw_py​github.comv2-3336049ca3339022d3a7266491d2fe41_ipico.jpg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值