python3备份juniper交换机

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
  Author:  Linxy -- <[email protected]>
  Purpose: Juniper备份脚本
  Created: 2017-6-23
"""

import datetime
import sys
import os
import telnetlib
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
su=[]
fa=[]

#获取年月日的str数据
def getymd (ymd):
 d=datetime.datetime.now()
 if ymd==‘y‘:
  return str(d.year)
 elif ymd==‘m‘:
  return str(d.month)
 elif ymd==‘d‘:
  return str(d.day)

#p1=‘./switch/‘+getymd(‘y‘)+‘/‘+getymd(‘m‘)+‘/‘+getymd(‘d‘)
l1=[getymd(‘y‘),getymd(‘m‘),getymd(‘d‘)]
#print(l1)
p1=‘./switch‘
if os.path.isdir(p1):
  pass
else: 
  os.mkdir(p1)
for i in l1:
 p1=p1+‘/‘+i
 if os.path.isdir(p1):
  pass
 else: 
  os.mkdir(p1)

filename1=‘./sw.txt‘#交换机IP地址列表存放位置 注意要把最后一个IP以后的空格和回车全部删除
filename2=‘./ssg.txt‘ 
def fc_srx(p2): #文件处理部分的函数
 if os.path.getsize(p2)==0:
  
  ‘‘‘
  密码不对时候 telnet的执行是成功的只是read_all的时候没有结尾的标记所以无法读出返回值
  但仍然会建立空txt文档所以需要在此再进行一次判断并把需要的值写入fa[]中
  ‘‘‘
  fa.append(host+‘\n‘)
  print(host+" is failed")
 else:
  with open(p2,‘r‘) as f:
   lines=f.readlines()
  with open(p2,‘w‘) as w:
   for I in lines:
    I=I.replace(‘---(more)---‘,‘‘)
    I=I.replace(‘                                        ‘,‘‘)
    I=I.replace(‘\r‘,‘‘)
    I=I.replace(‘\n‘,‘‘)
    if I==‘‘:
     pass
    else :
     w.write(I+‘\r\n‘) 
     
     
     
     
def fc_ssg(p2):
 if os.path.getsize(p2)==0:
  #print(host+‘ is failed‘)
  ‘‘‘
  密码不对时候 telnet的执行是成功的只是read_all的时候没有结尾的标记所以无法读出返回值
  但仍然会建立空txt文档所以需要在此再进行一次判断并把需要的值写入fa[]中
  ‘‘‘
  fa.append(host+‘\n‘)
  print(host+" is failed")
 else:
  with open(p2,‘r‘) as f:
   lines=f.readlines()
  with open(p2,‘w‘) as w:
   for I in lines:
    I=I.replace(‘--- more ---‘,‘‘)
    I=I.replace(‘ ‘,‘‘)
    I=I.replace(‘\r‘,‘‘)
    I=I.replace(‘\n‘,‘‘)
    if I==‘‘:
     pass
    else :
     w.write(I+‘\r\n‘) 
 
def juniper_bak (host):#备份juniper函数
 user=‘这里是交换机帐号‘
 password=‘这里是交换机密码‘
 print (‘Backing up:‘+host)
 tn=telnetlib.Telnet(host.encode(‘utf-8‘),port=23,timeout=4)
 tn.read_until(b"login:")
 tn.write(user.encode(‘utf-8‘)+‘\n‘.encode(‘utf-8‘))
 tn.read_until(b"Password:")
 tn.write(password.encode(‘utf-8‘)+‘\n‘.encode(‘utf-8‘))
 tn.read_until(b‘> ‘)
 tn.write(b‘show configuration | display set ‘+‘\n‘.encode(‘utf-8‘))
 for i in range(300) :
  tn.write(b‘ ‘)
 tn.write(b‘q\n‘)
 tn.write(b‘q\n‘)

p2=p1+‘/‘+host+‘/‘+host+‘.txt‘
 if os.path.isdir(p1+‘/‘+host):
  pass
 else: 
  os.mkdir(p1+‘/‘+host)

with open(p2,‘w‘) as f:
  f.write(tn.read_all().decode())
 tn.close()
 fc_srx(p2)
def ssg_bak (host):#备份ssg函数
 user=‘这里是ssg设备帐号‘
 password=‘这里是ssg设备密码‘
 print (‘Backing up:‘+host)
 tn=telnetlib.Telnet(host.encode(‘utf-8‘),port=23,timeout=4)
 tn.read_until(b"login:")
 tn.write(user.encode(‘utf-8‘)+‘\n‘.encode(‘utf-8‘))
 tn.read_until(b"password:")
 tn.write(password.encode(‘utf-8‘)+‘\n‘.encode(‘utf-8‘))
 tn.read_until(b‘>‘)
 tn.write(b‘get config‘+‘\n‘.encode(‘utf-8‘))
 for i in range(50000) :#看具体设备有些设备输入200个空格即可获取到全部回显
  tn.write(b‘ ‘)
 tn.write(b‘exit\n‘)
 p2=p1+‘/‘+host+‘/‘+host+‘.txt‘
 if os.path.isdir(p1+‘/‘+host):
  pass
 else: 
  os.mkdir(p1+‘/‘+host)
 
 with open(p2,‘w‘) as f:
  f.write(tn.read_all().decode(encoding=‘gbk‘))
 tn.close()
 fc_ssg(p2)

def sendmail_cxr(tx):#发送邮件函数
 def _format_addr(s): #注意此函数实际传入的S格式为‘字符串 <邮箱地址>’
  name, addr = parseaddr(s)
  return formataddr((Header(name, ‘utf-8‘).encode(), addr)) 
 from_addr = ‘这里是发送邮件的邮箱地址‘
 password = ‘这里是邮箱密码‘
 to_addr = ‘接收邮件的地址1‘
 to_addr2=‘接收邮件的地址2‘
 smtp_server = ‘SMT服务的域名要写这里‘
 
 msg = MIMEText(tx, ‘plain‘, ‘utf-8‘)

msg[‘From‘] = _format_addr(‘邮件相关的格式不要细究 <%s>‘ % from_addr)
 msg[‘To‘] = _format_addr(‘邮件相关的格式不要细究 <%s>‘% to_addr)
 msg[‘Subject‘] = Header(‘今日备份情况‘, ‘utf-8‘).encode()  #邮件主题

server = smtplib.SMTP(smtp_server, 25)
 #server.set_debuglevel(1)
 server.login(from_addr, password)
 server.sendmail(from_addr, [to_addr,to_addr2], msg.as_string())
 server.quit()

if __name__==‘__main__‘:
 with open (filename2,‘r‘)as fo:
  for line in fo.readlines():
   if line.split(‘ ‘)[0]!=‘‘:
    line=line.replace(‘\n‘,‘‘)
    host=line.split(‘ ‘)[0]
    try:
     ssg_bak(host)
     su.append(host+‘\n‘)
    except:
     print(host+" is failed")
     fa.append(host+‘\n‘)

with open (filename1,‘r‘)as fo:
  for line in fo.readlines():
   if line.split(‘ ‘)[0]!=‘‘:
    line=line.replace(‘\n‘,‘‘)
    host=line.split(‘ ‘)[0]
    try:
     juniper_bak(host)
     su.append(host+‘\n‘)
    except:
     print(host+" is failed")
     fa.append(host+‘\n‘)
  ‘‘‘
  密码不对时候 telnet的执行是成功的只是read_all的时候没有结尾的标记所以无法读出返回值
  但仍然会建立空txt文档所以需要在文本处理环节再进行一次判断并把需要的值写入fa[]中
  ‘‘‘
 #print(su)
 #print(fa)
 tx=‘‘
 if len(su)!=0:
  txsu=‘备份成功\n‘+‘‘.join(su)
  csu=0
  for i in su:
   csu=csu+1
  tx=tx+txsu+‘总计成功‘+str(csu)+‘个‘+‘\n\n‘
 if len(fa)!=0:
  cfa=0
  for i in fa:
   cfa=cfa+1
  txfa=‘备份失败\n‘+‘‘.join(fa)
  tx=tx+txfa+‘总计失败‘+str(cfa)+‘个‘+‘\n\n‘
 sendmail_cxr(tx)

时间: 2024-10-12 23:57:56

python3备份juniper交换机的相关文章

python3以ftp方式备份华为交换机配置文件

客户这里,有很多华为S系列交换机,基本时都是2700,5700系列.数量很多,原来都是手工登陆备份,费时,费力.后来想用python脚本备份交换机配置文件.思路:1.华为交换机的配置文件都是以vrpcfg.zip文件方式保存在交换机内存中2.华为的交换机都支持ftp服务器3.使用python3脚本批量备份保存在windows主机指定目录4.有些设备可能故障等原因,无法进行备份,需要记录失败日志 前提条件,windows上已经安装好python3.6,配置好环境变量,脚本如下: #! env py

RSTP 1. 配置备份根交换机 2. 配置边缘端口

1.配置备份根交换机 (让R1为根交换机 R2为备份根交换机) 格式:[S1]stp root primary [S2]stp root secondary 第一步:在所有的交换机把生成树模式由默认的MSTP改为RSTP CIST Bridge 交换机自己的ID CIST Root  根交换机的ID 根的交换机的ID最小     上图显示为S4为根交换机 第二步:配置备份交换机 此时R1的优先级变为0,R2的优先级为4096 ROOT为根端口 DESI为指定端口 BACK为备份端口 ALTE为替

Juniper交换机做端口镜像

前一段时间部署了一台分析流量的的设备,需要将端口的流量镜像到该服务器的网卡一份. 由于juniper操作命令不熟悉,网上命令也比较少.因此写份Blog记录下. EX交换机的端口镜像实现对端口入流量,或者出流量单独进行镜像,而且通过ethernet-switching的firewall filter,可以指定符合条件的流量进行镜像,例如指定IP地址或者MAC地址的流量,或者指定协议(例如Http)的流量镜像. 操作步骤: (1)建立一个端口镜像名称,并且指定需要作镜像的端口,同一个镜像名称可以指定

Python通过paramiko模块备份H3C交换机配置

1.过程思路 备份配置前,先保存交换机running config到starup config 交换机通过tftp备份配置文件 批量备份交换机配置(通过excel文件保存交换机IP) name ip SUZ-SW-101 10.X.X.1 SUZ-SW-102 10.X.X.2 SUZ-SW-103 10.X.X.3 SUZ-SW-104 10.X.X.4 2.python代码 import xlrd import paramiko import time def ssh_SW(name,ip)

Python备份H3C交换机配置并上传到tftp

实验环境: centos7 python3 pip3 install netmiko 1. python脚本 import time from netmiko import ConnectHandler now = time.strftime("%Y%m%d", time.localtime(time.time())) log_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) ip_list =

使用python脚本利用SSH协议通过TFTP备份华为交换机配置

前提工作 python中默认没有安装SSH模块,SSH功能依靠paramiko 模块实现,需要自己独立安装,具体安装步骤自行百度. 主要脚本,和之前一样,通过TFTP备份配置 #!/usr/bin/python #-*- coding: utf-8 -*- import re import paramiko          #引入ssh模块,该模块需要单独安装. import time LogTime = time.strftime('%Y-%m-%d_%H-%M-%S') tftp = ra

juniper交换机将多个接口加入同时到vlan中

[EX/QFX] Wildcard range commands for EX switches [KB23789] Show KB Properties SUMMARY: This article provides information about the wildcard range commands for EX switches. PROBLEM OR GOAL: The wildcard range option enables you to configure multiple i

juniper交换机ex2200配置(生产环境)

qnqy-dpf-jrex2200-01# show | display set set version 12.3R11.2set system host-name qnqy-dpf-jrex2200-01set system time-zone Asia/Shanghaiset system root-authentication encrypted-password "$1$7RMyTyeG$tLGAToBggMFhcOw85Ts.EP/"set system login user

juniper EX8200 系列交换机配置常用命令

启用禁用一个端口 [email protected]# set interfaces ge-0/0/4 disable   #1. 关闭端口[email protected]# delete interfaces ge-0/0/4 disable #2. 恢复端口 配置MGT口IP[email protected]# set interfaces me0 unit 0 family inet address  192.168.1.1/24 设置接口参数 [email protected]# ed