python自动化运维管理拓扑

目录

1、简介

2、实验环境

3、拓扑图

4、需求及其代码

4.1、测试连通性

4.2、远程登陆

4.3、配置loopback

4.4、监控内存使用率

4.5、自动化巡检内存使用率

4.6、自动化配置snmp服务

4.7、提取分析字符串


🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开发和前端开发。
🦅主页:@逐梦苍穹
🍔您的一键三连,是我创作的最大动力🌹

1、简介

这部分实验是属于python自动化管理拓扑、配置拓扑的实验。模拟企业配置中,使用python自动化批量管理网络设备,减少人力物力时间成本的场景。

2、实验环境

ensp软件+centos。

ensp中需要配置好cloud,连接本地的vmnet8虚拟网卡,centos需要设置nat。

cloud

centos8

centos8需要能ping同vmnet8的网关和拓扑里面的192.168.99.254/24的ip地址。

3、拓扑图

4、需求及其代码

4.1、测试连通性

在centos8虚拟机上,测试是否能够ping通实验拓扑中设备(RT、CoreSW1、CoreSW2、AccessSW1、AccessSW2)的管理IP地址:

Ping AccessSW1管理IP地址:

Ping AccessSW2管理IP地址截图:

Ping CoreSW1管理IP地址截图:

Ping CoreSW2管理IP地址截图:

Ping RT 管理IP地址截图:

4.2、远程登陆

远程登陆到设备RT:

代码:

import paramiko
import timeip = "3.3.3.3"
user = "python"
passwd = "123456"ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip, username=user, password=passwd,look_for_keys=False)command = ssh_client.invoke_shell()command.send("dis version\n")
time.sleep(1)
output = command.recv(65535).decode("ascii")
name = output.split("<")[-1][:-1]
name = name + "-xzl42"
print(name)command.send("sys\n")
command.send("sysname " + name + "\n")
time.sleep(1)command.send("dis ospf routing\n")
time.sleep(1)output = command.recv(65535)
print(output.decode("ascii"))
ssh_client.close()

输出结果:

4.3、配置loopback

需求:远程登陆到设备Core SW1和Core SW2上配置loopback42,设置IP地址为92.92.92.92/32并保存配置。并输出该接口的IP配置信息.

代码:

import paramiko
import re
import timeips = ["1.1.1.1", "2.2.2.2"]
user = "python"
passwd = "123456"for ip in ips:ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())try:ssh_client.connect(hostname=ip, username=user, password=passwd)command = ssh_client.invoke_shell()command.send("screen-length 0 temporary\n")time.sleep(1)command.send("sys\n")command.send("interface LoopBack 42\n")command.send("ip address 92.92.92.92 32\n")time.sleep(1)command.send("display ip interface LoopBack 42\n")time.sleep(1)output = command.recv(65535).decode("utf-8")print(output)except Exception as e:print(f"无法连接或配置设备: {str(e)}")finally:ssh_client.close()

输出结果:

①设备Core SW1输出:

②设备Core SW2输出:

4.4、监控内存使用率

要求:查看实验拓扑中3台设备(RT、CoreSW2、AccessSW2)的内存使用率情况。

这里使用多线程+正则表达式来实现:

代码:

import paramiko
import time
from multiprocessing import Process
import redef internalStorage(ip):ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_client.connect(hostname=ip, username="python", password="123456")cmd = ssh_client.invoke_shell()cmd.send("screen-length 0 temporary\n")cmd.send("dis memory-usage\n")time.sleep(1)result = b''recv_ready_status = Truewhile recv_ready_status:output = cmd.recv(65535)result += outputtime.sleep(1)recv_ready_status = cmd.recv_ready()output_end = result.decode("ascii")name = output_end.split("<")[-1][:-1]lines = output_end.split("\n")for line in lines:result = re.search(r'Memory Using Percentage Is: (\d+)%', line)if result != None:output_end = result.group(1)breakprint("{} meory-usage: {}%".format(name,output_end))ssh_client.close
if __name__ == '__main__':ips = ["3.3.3.3", "2.2.2.2", "192.168.99.20"]ls = []for i in ips:p=Process(target=internalStorage,args=(i,))ls.append(p)for i in ls:i.start()

输出:

4.5、自动化巡检内存使用率

在4.3的基础上实现对三台设备的自动化巡检内存使用率并输出,每隔20秒巡检一次:

import paramiko
import time
from multiprocessing import Process
import redef internalStorage(ip):ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_client.connect(hostname=ip, username="python", password="123456")cmd = ssh_client.invoke_shell()cmd.send("screen-length 0 temporary\n")cmd.send("dis memory-usage\n")time.sleep(1)result = b''recv_ready_status = Truewhile recv_ready_status:output = cmd.recv(65535)result += outputtime.sleep(1)recv_ready_status = cmd.recv_ready()output_end = result.decode("ascii")name = output_end.split("<")[-1][:-1]lines = output_end.split("\n")for line in lines:result = re.search(r'Memory Using Percentage Is: (\d+)%', line)if result != None:output_end = result.group(1)breakprint("{} meory-usage: {}%".format(name,output_end))ssh_client.close
if __name__ == '__main__':while True:ips = ["3.3.3.3", "2.2.2.2", "192.168.99.20"]ls = []for i in ips:p=Process(target=internalStorage,args=(i,))ls.append(p)for i in ls:i.start()time.sleep(20)

4.6、自动化配置snmp服务

需求:通过python脚本,在设备CoreSW1上配置snmp服务,只允许win10-vscode作为网管平台访问其snmp服务:

代码:

import paramiko
import time
from multiprocessing import Processdef sshLogin(ip):ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_client.connect(hostname=ip, username="python", password="123456")cmd = ssh_client.invoke_shell()try:cmd.send("sy\n")cmd.send("acl 2000\n")cmd.send("rule 5 permit source 192.168.99.101 0.0.0.0\n")time.sleep(1)cmd.send("rule 100 deny\n")cmd.send("quit\n")cmd.send("dis acl all\n")cmd.send("snmp-agent\n")time.sleep(1)cmd.send("snmp-agent community read pub-xzl-42 acl 2000\n")time.sleep(1)cmd.send("snmp-agent community write prv-xzl-42 acl 2000\n")time.sleep(1)cmd.send("snmp-agent sys-info version v1 v2c\n")time.sleep(1)cmd.send("dis snmp-agent community\n")output = cmd.recv(65535).decode("utf-8")print(output)except:print("出错")ssh_client.close()if __name__ == '__main__':ips = ["1.1.1.1"]ls = []for i in ips:p=Process(target=sshLogin,args=(i,))ls.append(p)for i in ls:i.start()

输出:

测试snmp服务正常,开启抓包抓取到平台获取到的system组信息:

抓包截图:

4.7、提取分析字符串

从如下字符串中提取相应信息并保存到json文件,读出保存的json文件并打印出来。

字符串:

代码:

import re
import jsondef convert_prefix_to_subnet_mask(prefix):# 将子网掩码的位数转换为字符串subnet_mask = '1' * prefix + '0' * (32 - prefix)# 将字符串转换为四段十进制数字octets = [int(subnet_mask[i:i+8], 2) for i in range(0, 32, 8)]# 将数字转换为点分十进制格式subnet_mask_str = '.'.join(map(str, octets))return subnet_mask_str# 给定的字符串
str_data = '''
Interface           IP Address/Mask      Physical   Protocol
LoopBack0           1.1.1.1/32           up         up(s)
MEth0/0/1           unassigned           down       down
NULL0               unassigned           up         up(s)
Vlanif1             unassigned           down       down
Vlanif10            172.16.52.10/24      up         up
Vlanif20            172.16.62.10/24      up         up
Vlanif30            192.168.72.1/30      up         up
Vlanif99            192.168.99.201/24    up         up
'''# 提取接口信息的正则表达式
interface_regex = re.compile(r'(\S+)\s+([\d.]+(?:\+\S+)?)/(\d+)\s+\S+\s+\S+')# 提取接口信息
interface_matches = interface_regex.findall(str_data)# 创建 JSON 数据
json_data = {"文件描述": "本json文件保存网络设备接口IP信息","创建者": "xzl42","接口IP信息": [{"接口名": name, "IP地址": ip, "子网掩码": convert_prefix_to_subnet_mask(int(prefix))} for name, ip, prefix in interface_matches]
}# 将 JSON 数据保存到文件
with open('jsonData.json', 'w', encoding='utf-8') as json_file:json.dump(json_data, json_file, indent=4, ensure_ascii=False)# 读取 JSON 文件并打印
with open('jsonData.json', 'r', encoding='utf-8') as json_file:loaded_data = json.load(json_file)print(json.dumps(loaded_data, indent=4, ensure_ascii=False))

输出:

json文件:

{"文件描述": "本json文件保存网络设备接口IP信息","创建者": "xzl42","接口IP信息": [{"接口名": "LoopBack0","IP地址": "1.1.1.1","子网掩码": "255.255.255.255"},{"接口名": "Vlanif10","IP地址": "172.16.52.10","子网掩码": "255.255.255.0"},{"接口名": "Vlanif20","IP地址": "172.16.62.10","子网掩码": "255.255.255.0"},{"接口名": "Vlanif30","IP地址": "192.168.72.1","子网掩码": "255.255.255.252"},{"接口名": "Vlanif99","IP地址": "192.168.99.201","子网掩码": "255.255.255.0"}]
}

              

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

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

相关文章

网络流量分析与故障分析

1.网络流量实时分析 网络监控 也snmp协议 交换机和服务器打开 snmp就ok了 MRTG或者是prgt 用于对网络流量进行实时监测&#xff0c;可以及时了解服务器和交换机的流量&#xff0c;防止因流量过大而导致服务器瘫痪或网络拥塞。 原理 通过snmp监控 是一个…

外汇网站主要业务逻辑梳理

上图为工行ICBC的外汇保证金交易界面。 当需要买入帐户欧元&#xff08;欧元人民币&#xff09;时&#xff0c;买入100欧元&#xff0c;因为没有杠杆&#xff0c;虽然欧元中间价是782.34&#xff0c;但实际需要支付783.14元人民币的保证金&#xff0c;这个兑换不是真实的外汇兑…

2.8 EXERCISES

如果我们想使用每个线程来计算向量加法的一个输出元素&#xff0c;那么将线程/块索引映射到数据索引的表达式是什么&#xff1f; 答&#xff1a;C 假设我们想用每个线程来计算向量加法的两个&#xff08;相邻&#xff09;元素。将线程/块索引映射到i&#xff08;由线程处理的…

[MySQL] 数据库的主从复制和读写分离

一、mysql主从复制和读写分离的相关知识 1.1 什么是读写分离? 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作( INSERT、UPDATE、DELETE) &#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。…

Windows11下载安装nacos(2.3.0)详解

一、环境要求 windows7以上 jdk8及以上版本&#xff0c;并且配置了JAVA_HOME环境变量 二、nacos下载解压 release版本地址:Releases alibaba/nacos GitHub 下载后解压即可&#xff0c;上面的tar.gz是linux版本 解压后如下 nacos自己内置有数据库derby&#xff0c;我用的是…

使用 matlab 求解最小二乘问题

有约束线性最小二乘 其标准形式为&#xff1a; min ⁡ x 1 2 ∥ C x − d ∥ 2 2 \mathop {\min }\limits_x \quad \frac{1}{2}\left\| Cx-d \right\|_2^2 xmin​21​∥Cx−d∥22​ 约束条件为&#xff1a; A ⋅ x ≤ b A e q ⋅ x b e q l b ≤ x ≤ u b \begin{aligned} …

RAG 全链路评测工具 —— Ragas

RAG是目前比较火热的一个概念。对应的应用如雨后春笋般涌出。我们在实际的探索中&#xff0c;可能会有各种各样的优化方案。但是优化是否有用呢&#xff1f;模型影响会有多大呢&#xff1f; 我们需要一把尺子&#xff0c;来做全链路的衡量。才能够得出&#xff0c;到底应该朝哪…

光纤知识总结

1光纤概念&#xff1a; 光导纤维&#xff08;英语&#xff1a;Optical fiber&#xff09;&#xff0c;简称光纤&#xff0c;是一种由玻璃或塑料制成的纤维&#xff0c;利用光在这些纤维中以全内反射原理传输的光传导工具。 微细的光纤封装在塑料护套中&#xff0c;使得它能够…

程序猿的时间管理和生产力

文章目录 为什么时间管理很重要&#xff1f;如何管理时间&#xff1f;心理维度生理维度技术尺寸 时间管理技巧每周计划基于目标的规划番茄钟为什么是25分钟&#xff1f;番茄钟为什么有效&#xff1f;艾森豪威尔矩阵这一切都是从开发者的角度来看的 也许我从开始学习或从事软件开…

React 入门 - 01

本章内容 目录 1. 简介1.1 初始 React1.2 React 相关技术点1.3 React.js vs Vue.js 2. React 开发环境准备2.1 关于脚手架工具2.2 create-react-app 构建一个 React 项目工程 1. 简介 1.1 初始 React React JS 是 Facebook 在 2013年5月开源的一款前端框架&#xff0c;其带来…

基于Java SSM框架实现实现机房预约系统项目【项目源码+论文说明】

基于java的SSM框架实现机房预约系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#…

2道经典的C语言练习题(解答超详细)

文章目录 每日一言12结语⭐如果发现自己做错了&#xff0c;请不要气馁&#xff0c;做题就是一个查漏补缺的过程。每个人不是天生就会写代码的&#xff0c;给自己一些时间&#xff0c;不要放弃&#xff0c;加油陌生人&#xff01; 每日一言 当你关注到自己行为背后的意图时&…

centos 8.0 安装sysbench 1.0.17

序号步骤说明执行命令执行结果备注1 下载并解压sysbench-1.0.17.zip sysbench-1.0.17.zip2安装依赖文件 yum install automake libtool -y yum install /usr/include/libpq-fe.h 3安装sysbench cd sysbench-1.0.17 ./autogen.sh ./configure \ --prefix/sysbench \ --with-pgsq…

快乐学Python,Python基础之组织代码「类与对象」

在上一篇文章中&#xff0c;我们了解了函数。这一篇文章我们来了解一下Python中另外一个重要的概念&#xff1a;类与对象。 1、类与对象 &#xff08;1&#xff09;类与对象有什么关系&#xff1f; 你可能会奇怪&#xff0c;为什么要叫类与对象呢&#xff1f;是两个不同的东…

Rustdesk本地配置文件存在什么地方?

环境&#xff1a; rustdesk1.1.9 Win10 专业版 问题描述&#xff1a; Rustdesk本地配置文件存在什么地方&#xff1f; 解决方案&#xff1a; RustDesk 是一款功能齐全的远程桌面应用。 支持 Windows、macOS、Linux、iOS、Android、Web 等多个平台。 支持 VP8 / VP9 / AV1 …

Nacos 学习之系列文章

系列文章目录 目录 系列文章目录 文章目录 前言 一、Nacos是什么&#xff1f; 二、Nacos的主要功能 服务发现和服务健康监测 动态配置服务 动态 DNS 服务 三、Nacos 地图 四、Nacos 生态图 总结 前言 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Naco…

白话机器学习的数学-3-评估

1、 模型评估 那我们如何测量预测函数 fθ(x)的正确性&#xff0c;也就是精度呢&#xff1f; 观察函数的图形&#xff0c;看它能否很好地拟合训练数据&#xff1a; 这是只有一个变量的简单问题&#xff0c;所以才能在图上展 示出来。 过像多重回归这样的问题&#xff0c;变量增…

pandas保存style到excel文件中

更多pandas style用法请参考&#xff1a;https://pandas.liuzaoqi.com/doc/chapter8/style.html 示例程序 import numpy as np import pandas as pd# 示例数据 dataframe pd.DataFrame({"date": pd.date_range("2024-01-01", "2024-02-01"),&…

D51+D52|接雨水

503.下一个更大元素ll 初始思路&#xff1a;这样这道题就变成了一道很纯粹的单调栈问题&#xff0c;因为只涉及了一个数组。但又因为这个数组是一个循环数组所以问题又变的有些复杂。 初始思路&#xff1a; 在循环数组的问题中&#xff0c;比较需要考虑的就是数组中最后一个…

web——德州扑克

1.此案例只用于学习 2.未接入游戏规则 HTML代码部分 <!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width"><meta name"Poker Skin" content&quo…