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.hqwc.cn/news/600646.html

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

相关文章

【明道云】设置默认值时,发现单选项目无法与文本项目比较

【背景】 新建表单&#xff0c;其中字段B的默认值通过使用字段A在另一张表单B中搜索获得。 字段A在当前表的填写形式是下拉框&#xff0c;而用于比较的表单B的相应字段A1则是文本。因此在建立条件时发现由于组件类型不同&#xff0c;无法选到字段A作为比较条件。 【解决办法】…

基于Difussion图像、视频生成综述

2024年大年初七&#xff08;02.16&#xff09;OpenAI 发布视频生成模型 Sora 在各大平台转疯了&#xff0c;和2022年发布ChatGPT3.5时一样的疯狂。在开工第一天&#xff0c;我就去官网上看了 Sora 的技术报告&#xff0c;遗憾的是&#xff0c;在这份技术报告中只披露了一些模型…

rsync+inotify的实时同步

目录 一、inotify 二、rsyncinotify实时同步搭建 1. 实验环境配置 2. 配置 服务端192.168.91.103 1. 修改rsync源服务器配置文件 3. 配置 客户端192.168.91.102 1. 创建文件夹 ​编辑 2. 调整 inotify 内核参数 3. 安装inotify-tools 4. inotify对文件进行监控 5. 测…

新手创业三大法则!2024创业赚钱项目 2024做什么行业前景好!2024适合普通人创业的项目!

第一、寻找痛点。成功的创业项目往往解决了某个现实生活中的痛点。作为新手小白&#xff0c;需要关注自己周围的人们所遇到的问题&#xff0c;并思考通过何种方式来解决这些问题。这样做不仅能提供实际需求&#xff0c;还能使创业项目更有长期性。只有真正了解人们的需求和痛点…

蓝桥杯练习笔记(十八)

蓝桥杯练习笔记&#xff08;十八&#xff09; 一、用辅助栈来优化递归深度过大的问题 输入示例 0000100010000001101010101001001100000011 0101111001111101110111100000101010011111 1000010000011101010110000000001011010100 0110101010110000000101100100000101001001 0…

配置 施耐德 modbusTCP 分布式IO子站 PRA0100

模块官方介绍&#xff1a;https://www.schneider-electric.cn/zh/product/BMXPRA0100 1. 总体步骤 2. 软件组态&#xff1a;在 Unity Pro 软件中创建编辑 PRA 模块工程 2.1 新建项目 模块箱硬件型号如下 点击 Unity Pro 软件左上方【新建】按钮&#xff0c;选择正确的 DIO …

【论文解读】大模型事实性调查(上)

一、简要介绍 本调查探讨了大型语言模型&#xff08;llm&#xff09;中的事实性的关键问题。随着llm在不同领域的应用&#xff0c;其输出的可靠性和准确性变得至关重要。论文将“事实性问题”定义为llm产生与既定事实不一致的内容的概率。论文首先深入研究了这些不准确性的含义…

通过Golang获取公网IP地址

在Go语言中&#xff0c;获取当前的外网&#xff08;公网&#xff09;IP地址可以通过多种方法实现。其中一种常见的方法是通过访问外部服务来获取。这些服务可以返回访问者的公网IP地址&#xff0c;例如 httpbin.org/ip 或 ipify.org。下面是一个简单的例子&#xff0c;展示了如…

国内通稿在海外新闻媒体如何宣发-大舍传媒

引言 在全球化的时代背景下&#xff0c;海外通稿成为了新闻媒体间交流和宣发的重要方式之一。本文将探讨海外通稿在新闻媒体中的宣发方式&#xff0c;并分析大舍传媒在这方面的成功经验。 来百度APP畅享高清图片 海外通稿的重要性 海外通稿是指由海外记者或通讯社撰写的报道…

通过 Cookie、Redis共享Session 和 Spring 拦截器技术,实现对用户登录状态的持有和清理(三)

本篇内容对应 “2.4 生成验证码” 小节 和 “4.7 优化登陆模块”小节 视频链接 1 Kaptcha介绍 Kaotcga是一个生成验证码的工具。 你的网站验证码是什么&#xff1f; 在我们这个牛客论坛项目&#xff0c;验证码分为两部分 给用户看的是图片&#xff0c;用户根据图片上显示的…

The C programming language (second edition,KR) exercise(CHAPTER 2)

E x c e r c i s e 2 − 1 Excercise\quad 2-1 Excercise2−1&#xff1a;输出结果如图1和图2所示&#xff0c;这道练习题需要文章1和文章2的知识。 #include <stdio.h> #include <limits.h>float getFloat(char sign, unsigned char exp, unsigned mantissa); do…

leetcode代码记录(最长递增子序列

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元…