jupyter python paramiko 网络系统运维

概述

通过使用jupyter进行网络运维的相关测试

设备为H3C

联通性测试

import paramiko
import time
import getpass
import re
import os
import datetimeusername = "*****"
password = "*****"
ip = "10.32.**.**"ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip,username=username,password=password,look_for_keys=False)
command = ssh_client.invoke_shell()print('=-=-=-=-=-=-=-=-=-=-=-=-=-=')
print('已经成功登陆交换机' +" "+ ip)#     # 关闭分屏显示
# command.send("Screen-len disable"+"\n")
#     # 获取配置信息
# command.send("display current-configuration | in sysname"+"\n")
# time.sleep(3)
#     # 输出配置信息
# output_config=command.recv(65535).decode()
# print(output_config)

获取配置信息 + 执行其他命令

在联通性测试ok后,可以在jupyter执行查看配置信息

command.send("Screen-len disable"+"\n")# 获取配置信息
command.send("display current-configuration | in sysname"+"\n")
time.sleep(3)# 输出配置信息
output_config=command.recv(65535).decode()
print(output_config)

关闭链接

ssh_client.close()

批量导出交换机配置

import paramiko
import time
import getpass
import re
import os
import datetimeusername = "******"
password = "******"
f = open('*****.list')# 创建备份目录
now = datetime.datetime.now()
now_date = now.date()
print("now date: " + str(now_date) + "\n")path = "./config/"
os.chdir(path)new_folder = str(now.date())+"-backup"
print("backup folder name: " + new_folder)# 判断目录存在
if not os.path.exists(new_folder):os.makedirs(new_folder)print("backup folder created")
else:print("backup folder already exists")
os.chdir("../")for line in f.readlines():ip = line.strip()ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_client.connect(hostname=ip,username=username,password=password,look_for_keys=False)command = ssh_client.invoke_shell()print('=-=-=-=-=-=-=-=-=-=-=-=-=-=')print('已经成功登陆交换机' +" "+ ip)# 关闭分屏显示command.send("Screen-len disable"+"\n")# 获取配置信息command.send("display current-configuration"+"\n")time.sleep(3)# 输出配置信息output_config=command.recv(65535).decode()# print(output_config)# 交换机名称获取command.send("display current-configuration | in sysname"+"\n")time.sleep(2)swname=command.recv(65535).decode()# print(swname)print("")# 定义正则表达式pattern = r'(?<=<).*(?=>)'regex = re.compile(pattern)match = regex.search(swname)swname = match.group()print("SW Name: " + swname)print("")# 定义文件名file_name = match.group()+".cfg"print("Config file: " + file_name)print("")# 写入文件# w+ 覆盖写入# a+ 追加写入config_files = open("./config/"+ new_folder + "/" + file_name,"w+")print("writing from output_config to " + file_name + "\n") config_files.write(output_config)time.sleep(3)config_files.close()ssh_client.close()print("Job successful: " + ip + " " + swname + " " + file_name + "\n" )

关于正则

# 定义正则表达式
pattern = r'(?:X|H|F)?GE1/0/[0-9].'# https://www.jyshare.com/front-end/854/
# 在Python中,使用re模块匹配字符串"XGE1/0"、"GE1/0"、"HGE1/0"和"FGE1/0"可以通过构造一个正则表达式来实现。
# 这个正则表达式需要能够匹配这四种不同的模式,
# 它们的共同点是都以"GE1/0"结尾,但是可能有不同的前缀("X"、"H"、"F"或没有前缀)。# 解释正则表达式:# (?: ... ):非捕获组,表示组内的模式匹配后不会被单独捕获。
# X|H|F:表示匹配字符"X"或"H"或"F"。
# ?:表示前面的非捕获组是可选的,即可以出现0次或1次。
# GE:表示字符串中必须出现"GE"。
# 1/0:表示字符串结尾是"1/0"。port_list1 = re.findall(pattern, port_list,re.S)
print(port_list1)

# print(output)
# 正则表达式,用于匹配接口及其媒体类型pattern = r'display\s+interface\s+(FGE1/0/\d+|GE1/0/\d+|HGE1/0/\d+|XGE1/0/\d+).*?Media type is ([^,]+)'# 正则表达式解释:# display\s+interface\s+: 匹配 display interface 开头的文本,\s+代表一个或多个空白字符。
# (FGE1/0/\d+|GE1/0/\d+|HGE1/0/\d+|XGE1/0/\d+): 匹配指定的接口,\d+ 匹配一个或多个数字。
# .*?: 非贪婪匹配任何字符,直到遇到 Media type is。
# Media type is ([^,]+): 匹配 Media type is 之后的文本,直到遇到逗号为止。括号中的 [^,]+ 匹配一系列非逗号的字符。
# 由于您的示例文本中的每个接口行后都直接跟随着媒体类型,因此我们不需要re.DOTALL参数。# 查找所有匹配项
matches = re.findall(pattern, output, re.DOTALL)
output1 = matches
print(output1)
# 打印匹配到的结果
for match in matches:interface, media_type = matchprint(f'Interface: {interface}, Media type: {media_type}')

关于pandas使用

import pandas as pd# 将output1转换为DataFrame
df = pd.DataFrame(output1, columns=['Interface', 'Media Type'])# 将DataFrame写入Excel文件
df.to_csv(file_name, index=False, encoding='utf-8')

# 设置显示最大行数和列数
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)# 读取Excel文件
df1 = pd.read_csv(file_name)# 打印DataFrame的内容
print(df1)

df1.to_excel(swname+".xlsx", index = False, sheet_name = swname)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/301103.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx配置之localhost和反向代理

文章目录 第一步、查看安装位置和配置文件第二步、web服务器设置第三步、localhost 指令第四步、设置反向代理 清明假期&#xff0c;在家练习Nginx配置&#xff0c;在前期【 linux环境下安装配置nginx代理服务器】已经完成nginx环境搭建&#xff0c;本期主要实践web服务器&…

【分治算法】大整数乘法Python实现

文章目录 [toc]问题描述基础算法时间复杂性 优化算法时间复杂性 Python实现 个人主页&#xff1a;丷从心. 系列专栏&#xff1a;Python基础 学习指南&#xff1a;Python学习指南 问题描述 设 X X X和 Y Y Y都是 n n n位二进制整数&#xff0c;计算它们的乘积 X Y XY XY 基础…

libVLC 音频立体声模式切换

在libVLC中&#xff0c;可以使用libvlc_audio_set_channel函数来设置音频的立体声模式。这个函数允许选择不同的音频通道&#xff0c;例如立体声、左声道、右声道、环绕声等。 /*** Set current audio channel.** \param p_mi media player* \param channel the audio channel…

数据挖掘及其近年来研究热点介绍

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

基于单片机16路多路抢答器仿真系统设计

**单片机设计介绍&#xff0c;基于单片机16路多路抢答器仿真系统设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机16路多路抢答器仿真系统的设计概要主要涵盖硬件设计、软件编程以及功能实现等方面。以下是针对该设计的详细概…

SAP HCM PT 2003修改班次,PP61无法自动更新

今天遇到一个问题&#xff0c;2003修改班次以后PP61无法自动更新&#xff0c;开始一直以为是什么配置点漏掉&#xff0c;但是发现开发机没问题&#xff0c;后来发现是用户选保存的时候选中目标计划的完成&#xff0c;这个是保存到实际计划的&#xff0c;数据存储psoll中&#x…

redis的常用基本命令与持久化

文章目录 redis的基本命令1.授权密码2.增加、覆盖、查询、删除、切换库名、移动、清空数据库 Redis持久化RDB模式主动备份自动备份RDB备份过程 AOF备份模式开启AOF备份模式执行流程 总结 redis的基本命令 1.授权密码 config set requirepass 密码设置完密码需要认证密码以后才…

【御控物联】JavaScript JSON结构转换(19):数组To对象——规则属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON数组 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

软件设计师29--并发控制

软件设计师29--并发控制 考点1&#xff1a;事务的特性例题&#xff1a; 考点2&#xff1a;并发问题并发产生的问题丢失更新不可重复读问题读“脏”数据 考点3&#xff1a;封锁协议例题&#xff1a; 考点1&#xff1a;事务的特性 原子性&#xff08;Atomicity&#xff09;&…

C顺序表:通讯录

目录 前言 通讯录数据结构 通讯录初始化 查找名字 增加联系人 删除联系人 展示所有联系人 查找联系人 修改信息 销毁通讯录 完整通讯录代码 前言 数据结构中的顺序表如果已经学会了&#xff0c;那么我们就可以基于顺序表来完成一个通讯录了 通讯录其实我们使用前…

红蓝色WordPress外贸建站模板

红蓝色WordPress外贸建站模板 https://www.mymoban.com/wordpress/5.html

Mysql底层原理十:Redo log

3.7 Redo log Redo log记录的是物理日志&#xff0c;具体就是哪个表空间&#xff0c;哪个数据页&#xff0c;哪个偏移量&#xff0c;改了几个字节&#xff0c;改成什么表空间号数据页号偏移量修改几个字节的值具体的值 3.7.1 Redo block &#xff08;批处理缓存&#xff09;…

nginx支持的多种负载均衡策略

目录 1.轮询&#xff08;默认&#xff09; 2. ip_hash 3. 加权轮询&#xff08;weight&#xff09; 4. fair&#xff08;第三方&#xff09; 5. 最少连接&#xff08;least_conn&#xff09; 1.轮询&#xff08;默认&#xff09; 将请求依次分配给每个服务器&#xff0c;确…

DeepSort行人车辆识别系统(实现目标检测+跟踪+统计)

文章目录 1、前言2、源项目实现功能3、运行环境4、如何运行5、运行结果6、遇到问题7、使用框架8、目标检测系列文章 1、前言 1、本文基于YOLOv5DeepSort的行人车辆的检测&#xff0c;跟踪和计数。 2、该项目是基于github的黄老师傅&#xff0c;黄老师傅的项目输入视频后&#x…

区块链相关概念

区块链是什么&#xff0c;就算是做计算机技术开发的程序员&#xff0c;100个当中都没有几个能把这个概念理解明白&#xff0c;更不要说讲清楚了。那对于普通人来说&#xff0c;就更扯了。 除了“挖矿”表面意思似乎比较好理解外&#xff0c;其他的基础概念真TMD绕。 去中心化、…

坚持十天做完Python入门100题第一天

坚持十天做完Python入门100题第一天 第1题 变量更新第2题 变量命名规则第3题 类型错误第4题 序列索引第5题 序列切片第6题 负数切片第7题 Range函数 第1题 变量更新 解析&#xff1a;Python代码的读取和执行是由上至下的&#xff0c;变量n一开始被赋值为1&#xff0c;但被更新了…

CLIP模型 图片问答

先简短介绍一下CLIP模型&#xff1a; CLIP (Contrastive Language–Image Pretraining) 是由 OpenAI 开发的先进的多模态视觉模型&#xff0c;结合了图像和文本处理能力。 CLIP 模型的主要特色在于它不仅可以理解图像&#xff0c;同时也能理解描述这些图像的文本。通过这样的方…

深度学习理论基础(七)Transformer编码器和解码器

学习目录&#xff1a; 深度学习理论基础&#xff08;一&#xff09;Python及Torch基础篇 深度学习理论基础&#xff08;二&#xff09;深度神经网络DNN 深度学习理论基础&#xff08;三&#xff09;封装数据集及手写数字识别 深度学习理论基础&#xff08;四&#xff09;Parse…

数据仓库面试总结

文章目录 1.什么是数据仓库&#xff1f;2.ETL是什么&#xff1f;3.数据仓库和数据库的区别&#xff08;OLTP和OLAP的区别&#xff09;4.数据仓库和数据集市的区别5.维度分析5.1 什么是维度&#xff1f;5.2什么是指标&#xff1f; 6.什么是数仓建模&#xff1f;7.事实表7.维度表…

Qt使用iostream的cout

在QT想使用iostream的cout。 参考以下博客&#xff1a; &#xff08;转载&#xff09;Qt中使用cout输出的方法 pro里加上; CONFIG console勾选 Run in Terminal clean工程&#xff0c;重新构建 上面是cout的&#xff0c;下面是我的另一个函数的qDebug输出的。