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"
    }
  ]
}

              

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于多反应堆的高并发服务器【C/C++/Reactor】(中)解析请求头并存储

一、解析请求头并存储 ### 解析请求头数据 1.数据存储在对应的Buffer结构内存块中。解析时&#xff0c;需要将readPos更新到请求头的起始位置parseHttpRequestLine函数中已经为解析请求头做好了准备。 回顾一下parseHttpRequestLine函数: bool parseHttpRequestLine(struct…

802.1X(HCIP)

目录 一、802.1X协议概述 1、802.1X协议概述 2、802.1X基本概念 认证模式 认证方式 端口控制方式 3、802.1X认证触发机制 客户端主动触发 设备端主动触发&#xff08;用于支持不能主动发送EAPOL-Start报文的客户端&#xff09; 4、EAP体系结构 5、EAP报文封装结构 6…

RT-Thread: 基于STM32CubeMX配置驱STM32驱动的USB虚拟串口调试

关键词&#xff1a;USB 虚拟串口 USB虚拟串口&#xff0c;RT-Thread Studio&#xff0c;STM32 说明&#xff1a; 1&#xff1a;文档记录 STM32F103系列基于 RT-Thread 系统的 USB虚拟串口的开启及数据收发应用流程介绍。 2&#xff1a;本文以STM32F103C8T6型号做测试&#x…

K8S中的Pod到底是什么

01 概述 In earlier chapters we discussed how you might go about containerizing your application, but in real-world deployments of containerized applications you will often want to colocate multiple applications into a single atomic unit, scheduled onto a …

USB定位检测

拍摄要求&#xff1a; 1、精度要求&#xff1a;检测USB接口内芯位置是否处于接口的中心&#xff0c;检测精度0.05mm。 2.速度要求&#xff1a;一分钟检测3个产品&#xff1b;一次一个产品&#xff1b; 拍摄思路&#xff1a; 如图&#xff0c;想要检测USB内芯位置是否处于接口的…

信号的互相关计算及时延估计

1. 信号的互相关计算 互相关反映向量x和移位&#xff08;滞后&#xff09;向量y之间的相似性。 最直观的解释是&#xff1a;互相关的作用是为了找到信号在哪一时刻与另一信号最像&#xff08;另一信号为本身时就是自相关&#xff09;&#xff01; 滑动求互相关&#xff08;图…

软件测试|Linux基础教程:ln命令与软链接和硬链接

简介 在Linux系统中&#xff0c;ln命令是一个非常有用的工具&#xff0c;用于创建链接&#xff08;link&#xff09;&#xff0c;将一个文件或目录链接到另一个位置。链接允许一个文件或目录可以同时存在于多个位置&#xff0c;而不会占用额外的磁盘空间。ln命令支持创建硬链接…

SAP 物料读取基本数据文本与检验文本READ_TEXT

1. 读取基本数据文本 使用函数 READ_TEXT 2. 读取检验文本

【金猿CIO展】是石科技CIO侯建业:算力产业赋能,促进数字经济建设

‍ 侯建业 本文由是石科技CIO侯建业撰写并投递参与“数据猿年度金猿策划活动——2023大数据产业年度优秀CIO榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 是石科技&#xff08;江苏&#xff09;有限公司成立于2021年&#xff0c;由国家超级计算无锡中心与…

CSDN博客重新更新

说来惭愧&#xff0c;好久没更新博客文章&#xff0c;导致个人博客网站&#xff1a;https://lenky.info/ 所在的网络空间和域名都过期了都没发觉&#xff0c;直到有个同事在Dim上问我我的个人博客为啥打不开了。。。幸好之前有做整站备份&#xff0c;后续慢慢把内容都迁回CSDN上…

【Docker】可以将TA用于什么,简单了解下

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是是《Docker容器》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深…

独立式键盘的按键功能扩展:“以一当四“

#include<reg51.h> // 包含51单片机寄存器定义的头文件 unsigned char ID; //储存流水灯的流动速度 sbit S1P1^4; //位定义S1为P1.4 /************************************************************** 函数功能&#xff1a;延时子程序 ***********…

卷积神经网络|迁移学习-猫狗分类完整代码实现

还记得这篇文章吗&#xff1f;迁移学习|代码实现 在这篇文章中&#xff0c;我们知道了在构建模型时&#xff0c;可以借助一些非常有名的模型&#xff0c;这些模型在ImageNet数据集上早已经得到了检验。 同时torchvision模块也提供了预训练好的模型。我们只需稍作修改&#xf…

我的阿里云服务器被攻击了

服务器被DDoS攻击最恶心&#xff0c;尤其是阿里云的服务器受攻击最频繁&#xff0c;因为黑客都知道阿里云服务器防御低&#xff0c;一但被攻击就会进入黑洞清洗&#xff0c;轻的IP停止半小时&#xff0c;重的停两个至24小时&#xff0c;给网站带来很严重的损失。而处理 ddos 攻…

Spring Cloud Gateway整合Sentinel

日升时奋斗&#xff0c;日落时自省 目录 1、实现整合 1.1、添加框架依赖 1.2、设置配置文件 1.3、设置限流和熔断规则 1.3.1、限流配置 Route ID限流配置 API限流配置 1.3.2、熔断配置 2、实现原理 先前Sentinel针对是业务微服务&#xff0c;没有整合Sentinel到Spring…

若依CRUD搬砖开始,Java小白入门(十)

背景 经过囫囵吞枣的学习若依框架&#xff0c;对于ruoyi-framework&#xff0c;common&#xff0c;安全&#xff0c;代码生成等模块都看了一圈&#xff0c;剩余的调度模块&#xff0c;这个暂时不深入&#xff0c;剩余的是ruoyi-system&#xff0c;就是用mybatis完成的&#xf…

c/c++基础 自增自减运算符 大白讲解i++/i--/++i/--i

后置运算符&#xff1a;i表示在使用x之后&#xff0c;再使x的值加1&#xff0c;即ii1; 前置运算符&#xff1a;i表示在使用x之前&#xff0c;先使x的值加1&#xff0c;即ii1. 前缀运算和后缀运算的区别&#xff1a;前缀运算是“先变后用”&#xff0c;而后缀运算是“先用后变”…

JavaScript:Date 对象-时间日期

Date 对象-时间日期: - JS中所有的关于时间信息都需要通过Date对象来表示 // 创建一个Date对象 // 如果直接使用new Date()创建时间对象&#xff0c;它会默认创建一个表示代码执行时刻的对象var d new Date();// 如果希望创建一个指定的时间的Date的对象&#xff0c;需要传递…

《代码整洁之道之程序员的职业素养》-验收测试测试策略

Tips&#xff1a;此文为阅读Bob大叔的《代码整洁之道》一书的摘抄小记&#xff0c;谨慎“食用” 一、验收测试 重视沟通&#xff0c;专业开发人员既要做好开发也要做好沟通。“输入糟糕&#xff0c;输出也会糟糕”&#xff0c;职业程序员需要重视与团队及业务部门的沟通&…

IP3005A 超高精度内置MOSFET 单节锂电池保护IC 英集芯

描述 IP3005系列IC是一款超高精度的单节锂离子/ 锂聚合物电池保护芯片&#xff0c;它内置功率MOSFET&#xff0c;全 集成了超高精度的过充电压、过放电压、过放电流、 过充电流检测保护电路。 IP3005采用了精确的电压判断电路&#xff0c;让过充电压&#xff0c;过充恢复电压&…