python自动化运维管理拓扑

news2024/11/13 11:20:57

目录

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 time

ip = "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 time

ips = ["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 re

def 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 = True
    while recv_ready_status:
        output = cmd.recv(65535)
        result += output
        time.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)
            break
    
    print("{} 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 re

def 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 = True
    while recv_ready_status:
        output = cmd.recv(65535)
        result += output
        time.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)
            break
    
    print("{} 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 Process

def 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 json

def 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.coloradmin.cn/o/1367551.html

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

相关文章

记一次生产事故排查

背景&#xff1a;刚接手一个新工程&#xff0c;是一个给国内top级医院开发的老项目&#xff0c;因为历史原因&#xff0c;代码质量略低&#xff0c;测试难度略高。 上线很久的功能&#xff0c;最近一直频繁的爆发各种问题&#xff0c;经排查发现都是因为在业务过程中im聊天账号…

Hyperledger Fabric 生成组织身份解析

fabric 版本 2.4.1 Fabric 网络通过证书和密钥来管理和认证成员身份&#xff0c;经常需要生成证书文件。通常这些操作可以使用 PKI 服务&#xff08;如 Fabric-CA&#xff09;或者 OpenSSL 工具来实现&#xff08;针对单个证书的签发&#xff09;。为了方便批量管理组织证书&am…

网页设计工作室网站Web前端制作个人网页(html+css+javascript)网页设计网站模板采用DIV CSS布局制作,网页作品有多个页面

网页设计工作室网站Web前端制作个人网页(htmlcssjavascript)网页设计网站模板采用DIV CSS布局制作&#xff0c;网页作品有多个页面 【网页设计工作室网站Web前端制作个人网页(htmlcssjavascript)网页设计网站模板采用DIV CSS布局制作&#xff0c;网页作品有多个页面】 https://…

赋能软件开发:生成式AI在优化编程工作流中的应用与前景

随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;特别是生成式AI模型如GPT-3/4的出现&#xff0c;软件开发行业正经历一场变革&#xff0c;这些模型通过提供代码生成、自动化测试和错误检测等功能&#xff0c;极大地提高了开发效率和软件质量。 本文旨在深入…

stm32---输入捕获实验实操(巨详细)

这次来分享上次没说完的输入捕获的知识点 实验中用到两个引脚&#xff0c;一个是通用定时器 TIM3 的通道 1&#xff0c;即 PA6&#xff0c;用于输出 PWM 信号&#xff0c;另一 个是高级控制定时器 TIM1 的通道 1&#xff0c;即 PA8&#xff0c;用于 PWM 输入捕获&#xff0c;实…

第19课 在Android环境中使用FFmpeg和openCV进行开发的一般步骤

在上节课&#xff0c;根据模板文件我们对在Android环境中使用FFmpeg和openCV进行开发有了一个初步的体验&#xff0c;这节课&#xff0c;我们来具体看一下其工作流程。 1.程序的入口 与VS2013程序开发类似&#xff0c;Android程序开发也有一个入口&#xff0c;在这个模板中&a…

Docker 部署后端项目自动化脚本

文章目录 开机自启动docker打包后端项目Dockerfile文件脚本文件使用 开机自启动docker systemctl enable docker打包后端项目 这里的项目位置是target同级目录 1.在项目下面新建一个bin目录 新建一个package.txt 写入下方代码后 后缀改为.bat echo off echo. echo [信息] 打…

WPF 导航界面悬浮两行之间的卡片 漂亮的卡片导航界面 WPF漂亮渐变颜色 WPF漂亮导航头界面 UniformGrid漂亮展现

在现代应用程序设计中&#xff0c;一个漂亮的WPF导航界面不仅为用户提供视觉上的享受&#xff0c;更对提升用户体验、增强功能可发现性和应用整体效率起到至关重要的作用。以下是对WPF漂亮导航界面重要性的详尽介绍&#xff1a; 首先&#xff0c;引人入胜的首页界面是用户与软…

C语言爬虫程序采集58商铺出租转让信息

为了找到一个好店铺好位置&#xff0c;往往要花费很大精力和财力过去寻找&#xff0c;就有有某些出租平台但是一个个查找下来也是十分麻烦&#xff0c;所以我利用我们的C语言基础&#xff0c;给大家写个商品转租的爬虫程序&#xff0c;让找店铺不在那么费时费力&#xff0c;至少…

命令行模式的rancher如何安装?

在学习kubectl操作的时候&#xff0c;发现rancher也有命令行模式&#xff0c;学习整理记录此文。 说明 rancher 命令是 Rancher 平台提供的命令行工具&#xff0c;用于管理 Rancher 平台及其服务。 前提 已经参照前文安装过了rancher环境了&#xff0c;拥有了自己的k8s集群…

基于SSM的校园二手交易管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

使用HttpSession和过滤器实现一个简单的用户登录认证的功能

这篇文章分享一下怎么通过session结合过滤器来实现控制登录访问的功能&#xff0c;涉及的代码非常简单&#xff0c;通过session保存用户登录的信息&#xff0c;如果没有用户登录的话&#xff0c;会在过滤器中处理&#xff0c;重定向回登录页面。 创建一个springboot项目&#…

BSP视频教程第29期:J1939协议栈CAN总线专题,源码框架,执行流程和应用实战解析,面向车通讯,充电桩,模组通信等(2024-01-08)

视频教程汇总帖&#xff1a;【学以致用&#xff0c;授人以渔】2024视频教程汇总&#xff0c;DSP第12期&#xff0c;ThreadX第9期&#xff0c;BSP驱动第29期&#xff0c;USB实战第5期&#xff0c;GUI实战第3期&#xff08;2024-01-08&#xff09; - STM32F429 - 硬汉嵌入式论坛 …

书生·浦语大模型全链路开源体系 学习笔记 第二课

基础作业&#xff1a; 使用 InternLM-Chat-7B 模型生成 300 字的小故事&#xff08;需截图&#xff09;。熟悉 hugging face 下载功能&#xff0c;使用 huggingface_hub python 包&#xff0c;下载 InternLM-20B 的 config.json 文件到本地&#xff08;需截图下载过程&#xf…

Typecho 最新XC主题 去除域名授权全解密源码

Typecho 最新XC主题 去除域名授权全解密源码 这是一款多样式主题&#xff0c;首页支持六种主题样式&#xff0c;支持Pjax优化访问速度&#xff0c;多种单页&#xff0c;如友链、说说等。评论支持表情&#xff0c;自定义编辑器&#xff0c;支持其他样式功能。该主题功能性挺高&…

【数值分析】最佳平方逼近,最佳逼近

最佳平方逼近 ∑ k 0 n W k ( f ( x k ) − ϕ ( x k ) ) 2 min ⁡ \sum_{k0}^{ n}W_k (f(x_k)-\phi (x_k))^2\min k0∑n​Wk​(f(xk​)−ϕ(xk​))2min → 节点非常多时 ∫ a b ρ ( x ) ( f ( x ) − ϕ ( x ) ) 2 d x min ⁡ \xrightarrow[]{\text{节点非常多时}} \int_…

vue3 内置组件

文章目录 前言一、过渡效果相关的组件1、Transition2、TransitionGroup 二、状态缓存组件&#xff08;KeepAlive&#xff09;三、传送组件&#xff08;Teleport &#xff09;四、异步依赖处理组件&#xff08;Suspense&#xff09; 前言 在vue3中 其提供了5个内置组件 Transiti…

【HarmonyOS4.0】第二篇-鸿蒙开发介绍

一、鸿蒙开发介绍 1.1.为什么要学习鸿蒙&#xff1f; 2019年HarmonyOS正式面世&#xff0c;至今鸿蒙已成长了4年&#xff0c;截至2023年8月&#xff0c;鸿蒙生态设备数量超过7亿台&#xff0c;已有220万开发者投入到鸿蒙生态的开发。根据Counterpoint最新数据&#xff0c;202…

【数据库基础】Mysql与Redis的区别

看到一篇不错的关于“Mysql与Redis的区别”的文章&#xff0c;转过来记录下~ 文章目录 一、数据库类型二、运行机制三、什么是缓存数据库呢&#xff1f;四、优缺点比较五、区别总结六、数据可以全部直接用Redis储存吗&#xff1f;参考资料 一、数据库类型 Redis&#xff1a;NOS…

uni-app如何生成骨架屏

骨架屏是页面的一个空白版本&#xff0c;通常会在页面完全渲染之前&#xff0c;通过一些灰色的区块大致勾勒出轮廓&#xff0c;待数据加载完成后&#xff0c;再替换成真实的内容。 参考效果 骨架屏作用是缓解用户等待时的焦虑情绪&#xff0c;属于用户体验优化方案。 生成骨…