使用python telnetlib批量备份交换机配置的方法


Posted in Python onJuly 25, 2019

使用了telnetlib模块,首先登录到交换机,列出并获取配置文件的名称,然后通过tftp协议将配置文件传输到文件服务器上,为避免配置文件覆盖,将备份的配置文件名称统一加入日期以作区分。

1. 登录方式和口令有好几种,比较懒惰,通过不同列表以做区分,如果每个交换机口令都不相同的话,就需要额外处理了。

2. 交换机的配置文件也有多种类型,也是通过列表进行区分。

3. 有些交换机支持ftp和sftp,但测试发现有些虽然有相应的客户端命令,但传输总有问题。也不能将每个交换机都配置为ftp服务器,不安全也不方便。最后采用tftp解决。tftp比较简单,没有办法创建目录以区分不同日期的备份。好在配置文件已经加入了日期做区分,马马虎虎可以运行了。

import telnetlib,sys

from datetime import date
today=date.today()
print(today)
ipaddrset1=['192.168.1.19','192.168.1.29','192.168.1.59']
ipaddrset2=['192.168.1.39','192.168.1.49','192.168.1.69','192.168.1.56','192.168.1.6','192.168.1.9','192.168.1.24',
      '192.168.1.72','192.168.1.73','192.168.1.74','192.168.1.75','192.168.1.76','192.168.1.41','192.168.1.16','192.168.1.32',]
ipaddrset3=['192.168.1.51','192.168.1.52','192.168.1.53','192.168.1.54','192.168.1.55',
      '192.168.1.15','192.168.1.16','192.168.1.22','192.168.1.23','192.168.1.25','192.168.1.26','192.168.1.27',
      '192.168.1.28','192.168.1.7']
hostname='192.168.8.201'
tn=telnetlib.Telnet(hostname)
print(tn.read_until(b'Username:').decode('ascii'))
tn.write(b'**********\n')
print(tn.read_until(b'Password:').decode('ascii'))
tn.write(b'************\n')
print(tn.read_until(b'>').decode('ascii'))
for ipaddr in ipaddrset1:
  telnet_dest="telnet "+ipaddr
  tn.write(telnet_dest.encode('ascii')+b'\n')
  tn.read_until(b'Password:').decode('ascii')
  tn.write(b'**********\n')
  tn.read_until(b'>').decode('ascii')
  tn.write(b'dir\n')
  tn.read_until(b'>').decode('ascii')
  fn=str(today)+"_"+str(ipaddr)+"_vrpcfg.zip \n"
  cmdli="tftp 192.168.5.33 put vrpcfg.zip " +str(fn)
  tn.write(cmdli.ede('ascii'))
  tmp=tn.read_until(b'>').decode('ascii')
  if "successfully" in tmp:
    print(str(ipaddr)+" backup successfully!")
  else:
    print(str(ipaddr)+" backup NOT successfully!")
  tn.write(b'quit\n')
  tn.read_until(b'>')
for ipaddr in ipaddrset2:
  telnet_dest="telnet "+ipaddr
  tn.write(telnet_dest.encode('ascii')+b'\n')
  tn.read_until(b'Password:').decode('ascii')
  tn.write(b'**********\n')
  tn.read_until(b'>').decode('ascii')
  tn.write(b'dir\n')
  tn.read_until(b'>').decode('ascii')
  fn=str(today)+"_"+str(ipaddr)+"_startup.cfg \n"
  cmdli="tftp 192.168.5.33 put startup.cfg " +str(fn)
  tn.write(cmdli.encode('ascii'))
  tmp=tn.read_until(b'>').decode('ascii')
  if "successfully" in tmp:
    print(str(ipaddr)+" backup successfully!")
  else:
    print(str(ipaddr)+" backup NOT successfully!")
  tn.write(b'quit\n')
  tn.read_until(b'>')
for ipaddr in ipaddrset3:
  telnet_dest="telnet "+ipaddr
  tn.write(telnet_dest.encode('ascii')+b'\n')
  tn.read_until(b'Password:').decode('ascii')
  tn.write(b'************\n')
  tn.read_until(b'>').decode('ascii')
  tn.write(b'dir\n')
  tn.read_until(b'>').decode('ascii')
  fn=str(today)+"_"+str(ipaddr)+"_startup.cfg \n"
  cmdli="tftp 192.168.5.33 put startup.cfg " +str(fn)
  tn.write(cmdli.encode('ascii'))
  tmp=tn.read_until(b'>').decode('ascii')
  if "successfully" in tmp:
    print(str(ipaddr)+" backup successfully!")
  else:
    print(str(ipaddr)+" backup NOT successfully!")
  tn.write(b'quit\n')
  tn.read_until(b'>')

tn.write(b'exit\n')
tn.close()

以上这篇使用python telnetlib批量备份交换机配置的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
深入解析Python中的descriptor描述器的作用及用法
Jun 27 Python
Python中str is not callable问题详解及解决办法
Feb 10 Python
Python语言描述连续子数组的最大和
Jan 04 Python
python如何把嵌套列表转变成普通列表
Mar 20 Python
Python 实现选择排序的算法步骤
Apr 22 Python
详解Python发送email的三种方式
Oct 18 Python
python django中8000端口被占用的解决
Dec 17 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 Python
pytorch实现Tensor变量之间的转换
Feb 17 Python
Django admin 实现search_fields精确查询实例
Mar 30 Python
简述 Python 的类和对象
Aug 21 Python
Python读取ini配置文件传参的简单示例
Jan 05 Python
python找出因数与质因数的方法
Jul 25 #Python
HTML的form表单和django的form表单
Jul 25 #Python
Python3 批量扫描端口的例子
Jul 25 #Python
python3 批量获取对应端口服务的实例
Jul 25 #Python
Python实现微信小程序支付功能
Jul 25 #Python
Form表单及django的form表单的补充
Jul 25 #Python
python实现切割url得到域名、协议、主机名等各个字段的例子
Jul 25 #Python
You might like
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
详解PHP文件的自动加载(autoloading)
2018/02/04 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
判断输入是否为空,获得输入类型的JS代码
2013/10/30 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
JS中实现简单Formatter函数示例代码
2014/08/19 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
元素绑定click点击事件方法
2015/06/08 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
js中url对象化管理分析
2017/12/29 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
2018/05/23 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
Python中的time模块与datetime模块用法总结
2016/06/30 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
Django csrf 两种方法设置form的实例
2019/02/03 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
Python 2种方法求某个范围内的所有素数(质数)
2020/01/31 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
煤矿开采专业求职信
2014/07/08 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
女生抽烟检讨书
2014/10/05 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
python 如何在list中找Topk的数值和索引
2021/05/20 Python
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript